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:やっとそらでかけるようになった(涙