back numbers

6.17.2008

Prologでbind

慣れた当人にとっては驚くに値しない事も、他人には意外と不思議がられるものである。そしてそういった事は、しばしば否定的な誤解を生んでいたりするのである。気が付いたときには出来るだけ発言しておくようにするのが、人として為すべき事だと思うのである。

Prologは append/3 を書くには最高で、後は悪くなる一方だと云った人が居るとか居ないとか。しかし中核的な原理である単一化は極めて強力な計算機構なので、実のところほとんどの事が簡単に書けてしまう(むしろ簡単過ぎて解決した気にならない)のである。Haskellで云うun-curryingやC++で云う変数バインドはこんな具合である。

% bind/3
bind(C1, ARGS, C2) :- C1 =.. [F|R], append(R, ARGS, L), C2 =.. [F|L].
plus(X, Y, Z) :- Z is X + Y.
?- bind(plus(1), [2, X], C), call(C).
X = 3,
C = plus(1, 2, 3).

記述さえ存在すれば、それはパターンマッチによって自由に変換出来る。Prologが新しい言語を作るための言語であると謂われる所以である。

0 件のコメント:

tags

Profile

Taito, Tokyo, Japan
明けども明けども次の埒
hiro.kosh@gmail.com