Prologをさわってみる

どうも仕事の関係上、一階述語論理やら自由文脈文法やらの単語が飛び出してくるので、これを機会にPrologで遊んでみようかと思います。

FreeBSDPortsから、SWI-Prolog(lang/swi-pl)をインストール。

を参考にクイックソートを動かしてみる。

qsort([], R, R).
qsort([X|L], R, R0) :- partition(L, X, L1, L2), qsort(L2, R1, R0), qsort(L1, R, [X|R1]).
partition([], _, [], []).
partition([X|L], Y, [X|L1], L2) :- X =< Y, !, partition(L, Y, L1, L2).
partition([X|L], Y, L1, [X|L2]) :- partition(L, Y, L1, L2).

う、動いたけど、コードの内容を理解するのに30分かかった… orz

まぁ、OCamlで書くクイックソートに似ているからそんなに抵抗無かったけど、これで何か作れる自信が無いや…