在学习 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 配置中有一些结果格式化选项。如果没有 - 如何通过最少的代码更改来实现这一点?)