如何从问题中打印变量值?

时间:2018-10-10 13:51:15

标签: prolog

我要加一点:

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.

还有没有不打印“是”的方法吗? 如果有帮助,我正在使用草莓序言。 预先谢谢你

2 个答案:

答案 0 :(得分:3)

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

?- [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 Prolog中:

1 ?- write(A).
_G1338
true.

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

因此,在SWI Prolog使用诸如_G1338之类的名称的情况下,您正在使用的Prolog实现显然仅使用带下划线的名称,例如_40

答案 1 :(得分:0)

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

web: cd client && PORT=3000 npm start
api: PORT=3001 && bundle exec rails s

尽管如此,仍然有一些未解决的问题:

有没有不打印“是”的方法?

之前出现的_number是什么?