什么应该从与自变量的分离返回?

时间:2009-01-02 21:19:30

标签: prolog

以下内容会产生什么结果:

p(X,Y) :- q(X).
p(X,Y) :- r(Y).
q(a).
r(b).

我没有方便的Prolog编译器,所以如果你再问p(X,Y)我无法测试会发生什么。代码甚至可以编译吗? p会返回两个答案,每个答案都有一个未绑定的变量吗?

在现实世界中,我认为p(X,Y)没有多大意义(人们可能更希望从p(X)q(X)跟随r(X) ,但我对这里实际发生的事情感兴趣,并且在外围地看,应该在这样一个退化的情况下发生。

2 个答案:

答案 0 :(得分:2)

p会返回两个答案,每个答案都有一个未绑定的变量吗?

是。你需要输入一个;看到进一步的解决方案:

| ? - p(X,Y)。

X = a? ;

Y = b

是 | ? -

这与理论一致,其中未绑定的变量意味着任何值都可以替代此变量。

答案 1 :(得分:1)

so.p包含:

p(X,Y) :- q(X).
p(X,Y) :- r(Y).
q(a).
r(b).

$ gprolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- consult('so.p').
compiling /home/jboker/Desktop/so.p for byte code...
/home/jboker/Desktop/so.p:1: warning: singleton variables [Y] for p/2
/home/jboker/Desktop/so.p:2: warning: singleton variables [X] for p/2
/home/jboker/Desktop/so.p compiled, 5 lines read - 506 bytes written, 8 ms

yes
| ?- p(X,Y).

X = a ?

yes