如何打印问题的变量值?



我做了一点补充:

sumbit(CIN,A,B,CO,R):- ... ?- sumbit(0 ,1 ,1 ,CO ,R) ,write(CIN),nl ,write(A),nl ,write("+"),nl ,write(B),nl ,write("--"),nl ,write(CO),write(R),nl.

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

0
1
+
1
--
10

相反,它的结果是这样的:

_40
_73
+
_149
--
10
Yes.

还有没有办法不打印"是"? 如果有帮助,我正在使用草莓prolog。 提前谢谢你

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

?- [CIN, A, B] = [0, 1, 1]
,sumbit(CIN
,A
,B
,CO
,R)
,write(CIN),nl
,write(A),nl
,write("+"),nl
,write(B),nl
,write("--"),nl
,write(CO),write(R),nl.

现在,所有变量都由调用本身或在调用之前实例化。

当变量未实例化时,没有要打印的值,因此将打印其"名称"。但是由于未使用的名称本身没有任何意义,因此系统可以自由地将其重命名为任何名称。在SWI序言中:

1 ?- write(A).
_G1338
true.

重命名通常是作为Prolog问题解决过程的一部分完成的,以确保同一谓词的任何两个单独调用不会相互干扰。

因此,在SWI Prolog使用像_G1338这样的名称时,您使用的Prolog实现显然只使用带有数字的名称,在下划线之后,如_40

我通过将 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.

不过,仍有一些未解决的问题:

有没有办法不打印"是"?

之前出来的_number是什么?

最新更新