Prologすげぇ

ガウディ本(asin:4798113468)を読んでいるんだけど、Prologというか関係プログラミングすげぇ。
要するにAppendを

{Append [1 2 3] [4 5 6] X}

と使うとXが[1 2 3 4 5 6]に束縛されるけど、

{Append X Y [1 2 3 4 5 6]}

と使うと結合すると[1 2 3 4 5 6]になるXとYの組みがすべて得られるという、Prolog的にはあたりまえのことなんだけど、これがある程度の規模になると、なんかすごい。

  • 引数と返り値という考え方が通用しない。とりあず適当に入力と結果を決めて読むけれども、結果の一部がすでに与えられていたりしてややこしい
  • 結果を計算する式がかならずしも、最後に書かれていない。再帰関数だと一番最後の行が結果になっているけど、関係プログラミングには通用しない
  • 見た目の上では末尾再帰を自然に使っているように見える。効率的にはどうなのか分からないけど
  • C言語と同等の効率を発揮するPrologコンパイラもあるらしい

なんというか、これを使いこなすには、forループのような手続き的な考え方とも、関数型言語再帰的な考え方とも違った考え方が必要な気がした。

Prologに興味が湧いたので、参考文献に挙げられていたPrologの技芸を買おうとしたら1万を越えてた。買えねー。