首页 > 解决方案 > 如何从问题中打印变量值?

问题描述

我正在做一点补充:

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.


推荐阅读