14/08/17 10:45:48.55 ruDVRpF3.net
この記事では、クイックソート・アルゴリズムの実装について、 様々な言語で書かれた関数型プログラミングのコードを紹介しています
なお、この記事の内容は、 2ちゃんねる掲示板 のプログラム板にあるスレッド 【PHP,Python】スクリプト, バトルロワイヤル36【Perl,Ruby】 で行われた議論を整理、加筆したものです。
関数型言語が関数型プログラミングを何の苦もなく実践できるのは、当たり前の話です。
Haskell
quicksort [] = []
quicksort (pivot:xs) = quicksort littles ++ pivot:(quicksort bigs)
where
f x (ls, bs) = if x < pivot then (x:ls, bs) else (ls, x:bs)
(littles, bigs) = foldr f ([], []) xs
この節で取り上げる Ruby, JavaScript, Python はどれも関数型言語には分類されていませんが、関数型の特性を取り入れていると言われています。
それでは、これら言語の関数型プログラミング・スタイルを見ていくことにしましょう。
JavaScript
function quicksort(xs) {
function f(xs) {
var pivot = xs[0];
function g(pair, x) {
var ls = pair[0], bs = pair[1]
return x < pivot ? [ls.concat([x]), bs] : [ls, bs.concat([x])];
}
var pair = xs.slice(1).reduce(g, [[], []]);
var littles = pair[0], bigs = pair[1];
return [].concat(
quicksort(littles), [pivot], quicksort(bigs)
); }
return xs.length <= 1 ? xs : f(xs); }
URLリンク(www.h6.dion.ne.jp)