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ループのような手続き的な考え方とも、関数型言語の再帰的な考え方とも違った考え方が必要な気がした。