2

以下内容会导致什么结果:

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)),但我对这里实际发生的事情以及外围情况感兴趣,在这种退化的情况下应该发生什么.

4

2 回答 2

2

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

是的。您需要输入一个 ; 查看更多解决方案:

| ?- p(X,Y)。

X = 一个?;

Y = b

是的 | ?-

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

于 2009-01-03T10:10:20.210 回答
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
于 2009-01-03T06:12:37.413 回答