Haskellの表記をGaucheと併せて比べてみる。

まずは、shiroさんに教えてもらったGaucheのコード*1

(use util.match)
(define qsort (match-lambda (()()) ((x . xs) (receive (l r) (partition (cut < <> x) xs) `(,@(qsort l) ,x ,@(qsort r))))))

次になるべく似せたHaskellのコード

import List
qsort [] = [] ; qsort (x:xs) = (\y->(qsort $ fst y)++[x]++(qsort $ snd y)) $ partition (\y->y<x) xs

partitionの受けが多値かタプルの違いと準クオートぐらいか。
こうやって並べるとリスト内包表記はすごいんだな。

qsort [] = [] ; qsort (x:xs) = qsort[y|y<-xs,y<x]++[x]++qsort[y|y<-xs,y>=x]

まあ、こうやって比較していくのはいいことだ。いろんな勉強ができる。

*1:やっとそらでかけるようになった(涙