以下内容会导致什么结果:
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)
or r(X)
),但我对这里实际发生的事情以及外围情况感兴趣,在这种退化的情况下应该发生什么.
以下内容会导致什么结果:
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)
or r(X)
),但我对这里实际发生的事情以及外围情况感兴趣,在这种退化的情况下应该发生什么.
p 会返回两个答案,每个答案都有一个未绑定的变量吗?
是的。您需要输入一个 ; 查看更多解决方案:
| ?- p(X,Y)。
X = 一个?;
Y = b
是的 | ?-
这与理论一致,其中未绑定的变量意味着任何值都可以替换该变量。
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