Prolog 如何打印问题中的变量值?

Prolog 如何打印问题中的变量值?,prolog,Prolog,我做了一点补充: 萨姆比特(CIN,A,B,CO,R):-。。。 ?-sumbit(0 1. 1. ,公司 ,R) ,write(CIN),nl ,写(A),nl ,写(“+”),nl ,写(B),nl ,写(“—”,nl ,写入(CO),写入(R),nl。 我要做的是打印CIN、A、B、CO和R的变量值。 应该是这样的: 0 1 + 1 -- 10 结果是: _40 _73 + _149 -- 10 Yes. 还有没有办法不打印“是”? 如果有帮助的话,我会使用草莓prolog。 提前感谢

我做了一点补充:

萨姆比特(CIN,A,B,CO,R):-。。。 ?-sumbit(0 1. 1. ,公司 ,R) ,write(CIN),nl ,写(A),nl ,写(“+”),nl ,写(B),nl ,写(“—”,nl ,写入(CO),写入(R),nl。

我要做的是打印CIN、A、B、CO和R的变量值。 应该是这样的:

0
1
+
1
--
10
结果是:

_40
_73
+
_149
--
10
Yes.
还有没有办法不打印“是”? 如果有帮助的话,我会使用草莓prolog。
提前感谢

我通过将write()放在sumbit(…)谓词中找到了答案:

sumbit(CIN,A,B,CO,R):-
    xor_(A,B,R1)
    ,and(A,B,R2)
    ,xor_(R1,CIN,R)
    ,and(R1,CIN,R4)
    ,or(R2,R4,CO)
    ,write(CIN),nl
    ,write(A),nl
    ,write("+"),nl
    ,write(B),nl
    ,write("--"),nl
    ,write(R),nl.
不过,仍有一些问题没有得到回答:

有没有办法不打印“是”


之前出现的_数是多少?

在不改变谓词定义的情况下实现这一点的一种方法是调整查询,如下所示:

?-[CIN,A,B]=[0,1,1]
,萨姆比特(CIN)
A.
B
,公司
,R)
,write(CIN),nl
,写(A),nl
,写(“+”),nl
,写(B),nl
,写(“—”,nl
,写入(CO),写入(R),nl。
现在,所有变量都被实例化,要么由调用本身实例化,要么在调用之前实例化

当一个变量没有实例化时,就没有要打印的值,所以它的“名称”会被打印出来。但由于未使用的名称本身没有任何意义,因此系统可以自由地将其重命名为任何名称。在SWI序言中:

1?-写入(A)。
_G1338
对。
重命名通常作为Prolog问题解决过程的一部分进行,以确保同一谓词的任何两个单独调用不会相互干扰


因此,当SWI Prolog使用诸如
\u G1338
之类的名称时,您使用的Prolog实现显然只使用带有数字的名称,在下划线之后,例如
\u 40
Yes
通常不会打印到STDOUT,而是打印到STDERR。在您的调用中,您永远不会统一
CIN
,等等。请注意,变量名不是“全局的”。prolog用“是”来表示它成功了。没有简单的方法“摆脱它”<代码>\u number是一个未实例化的匿名变量。如果在Prolog提示符下输入
write(X)。
,则会得到其中一个,因为
X
未绑定到特定的完全实例化的术语或值。正如Willem在之前的评论中指出的,Prolog中的变量不是全局变量。