要は、前の記事の続きである。
次のような、prologファイルを作ろう。
%%%%%%%%%%%%%%%%%%%%% % 事実の宣言 は(ニワトリ,生む). で(庭,生む). を(卵,生む). は(学生,読む). で(図書館,読む). を(本,読む). % ルール は(X,で(Y,を(Z,A))) :- は(X,A),で(Y,A),を(Z,A). は(X,を(Z,で(Y,A))) :- は(X,A),で(Y,A),を(Z,A). で(Y,を(Z,は(X,A))) :- は(X,A),で(Y,A),を(Z,A). で(Y,は(X,を(Z,A))) :- は(X,A),で(Y,A),を(Z,A). を(Z,は(X,で(Y,A))) :- は(X,A),で(Y,A),を(Z,A). を(Z,で(Y,は(X,A))) :- は(X,A),で(Y,A),を(Z,A). %%%%%%%%%%%%%%%%%%%%
要するに、構文解析で、すべてが最終フレーズにかかっている、先の例の場合、語順をどう変えても、意味は通じるということを示しているのである。
例えば、
?- は(学生,を(本,で(図書館,読む))). ?- で(図書館,を(本,は(学生,読む))). ?- を(本,は(学生,で(図書館 ,読む))).
は、すべて「true」となる。ただし、この三つの言葉は、ほとんど同じ意味なのだが、逆に、微妙に違ってもいる。それは、表現できていない。