以下内容会产生什么结果:
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)
,但我对这里实际发生的事情感兴趣,并且在外围地看,应该在这样一个退化的情况下发生。
答案 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