Prologを学習する過程で、与えられた物がその物の左/右/上/下にあるものを伝えることができる簡単なプログラムを作成しています。コードはこれです:
% left_(LeftThing, ToThing)
left_(bicycle, camera).
left_(pencil, clock).
left_(clock, butterfly).
left_(butterfly, fish).
% above_(AboveThing, ToThing)
above_(bicycle, pencil).
above_(camera, butterfly).
right(X, Y) :-
left_(Y, X);
X = (empty).
below(X, Y) :-
above_(Y, X);
X = (empty).
left(X, Y) :-
left_(X, Y);
X = (empty).
above(X, Y) :-
above_(X, Y);
X = (empty).
position(Thing, Left, Right, Above, Below) :-
left(Left, Thing),
right(Right, Thing),
above(Above, Thing),
below(Below, Thing), !.
今私が尋ねるとき:
?- position(clock, Left, Right, Above, Below).
私は答えを得ます:
左=鉛筆、 右=蝶、 上 = 下、下 = 空。
これは完全に正しい答えですが、Prolog に完全な置換を行い、標準的な方法で出力してもらいたいと思います。
左=鉛筆、 右=蝶、 上=空、 下=空。
プログラムの事実や規則を散らかさずに、出力でそのような置換を行うように Prolog に強制する方法はありますか? (エラー... SWI-Prolog 構成にいくつかの結果フォーマット オプションがある可能性があります。そうでない場合 - 最小限のコード変更でこれを実現するにはどうすればよいですか?)