Prolog returns 变量名而不是值

Prolog returns variable name instead of value

我有一种方法可以在建造塔时检查下一块砖的放置位置。

freePosition(POS, LEVEL) :- levelWithSpace(LEVEL),
                            freePositionOnLevel(POS, LEVEL).

此方法检查 space 的级别并询问该级别的空闲位置。 在我的例子中,它应该 return 两个结果:

但是它 return 的输出如下:

?- freePosition(POS, LEVEL).
POS = 1,
LEVEL = 2 ;
POS = LEVEL, LEVEL = 2 ;

如何更改 returns POS=2 而不是 POS=LEVEL 的行为?

您可以使用内置函数 format/2 发出格式化字符串:

?- freePosition(POS, LEVEL),
   format('Pos = ~d, Level = ~d~n', [POS,LEVEL]).

无论您使用何种 Prolog 实现,这都可以轻松获得统一的输出样式。

请注意,Prolog 解释器顶层给出的具体答案风格在不同的 Prolog 实现之间有很大差异。