(続)haskellでバブルソート

タプルの利用により少し先に進んだ。

Prelude> let bsort [] = []; bsort x = (\x->fst x ++ (bsort $ snd x)) $ splitAt 1 $ foldr (\x y->if y==[] then [x] else if x < (head y) then x:y else (head y):x:(tail y)) [] x
Prelude> bsort [3,5,2,4,1]
[1,2,3,4,5]
Prelude> bsort [3,5,2,4,2,1]
[1,2,2,3,4,5]

よく考えたらタプル不要。

Prelude> let bsort [] = []; bsort x = (\x->(head x):(bsort $ tail x)) $ foldr (\x y->if y==[] then [x] else if x < (head y) then x:y else (head y):x:(tail y)) [] x
Prelude> bsort [3,5,2,4,2,1]
[1,2,2,3,4,5]