論理的な思考能力が発現し、Prologに関心を抱くお年頃
前々から私は「NLPが好きだ、NLPと結婚したい、いや、むしろNLPになりたい!」みたいなことを言っていました。そしてPrologという言語は、NLPを行うために作られた言語らしいです。しかし私にとってPrologとNLPは、今のところ関係ありません。と言いますのも、NLPとは全く別の興味で、Prologをはじめてみました。まだよく理解していない部分も多いのですが、間違いなくおもしろいです。
「手続き型」「ナントカ指向」「関数型」などではなく、「論理型」と呼ばれています。他の言語でバックトラックの機能を持ったものを知らないのですが、少なくともPrologが本家なのでしょう。最初のうちは思いついたアルゴリズムを、再帰を用いたコードにするのが難しいと感じますが、慣れてくると、むしろ自分の思考がPrologに近寄るのだと思います。私はそんな境地にはまだ程遠いけど。
サンプルコード
ユークリッドの互除法のコードを紹介しておこうと思います。以下に示すのは、再帰的に2数の最大公約数を求めるアルゴリズムの完全なソースコードです。ちなみにGCDとはGreatest Common Measure、すなわち最大公約数のことだそうです。
コード
% euclid % 節1 % XとXの最大公約数はXである gcd(X,X,X). % 節2 % X>Y, X1 = X-Y, X1とYの最大公約数がZならば、XとYの最大公約数はZである。 gcd(X,Y,Z) :- X > Y, X1 is X - Y, gcd(X1,Y,Z). % 節3 % Y > X, Y1 = Y-X, XとY1の最大公約数がZならば、XとYの最大公約数はZである。 gcd(X,Y,Z) :- Y > X, Y1 is Y - X, gcd(X,Y1,Z).