Что должно вернуться из дизъюнкции с независимыми переменными? - PullRequest
2 голосов
/ 03 января 2009

Что будет в результате чего-то вроде:

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 ]

2 голосов
/ 03 января 2009

Вернет ли p два ответа, каждый с одной из переменных без привязки?

Да. Вам нужно ввести; чтобы увидеть дальнейшие решения:

| ? - p (X, Y).

Х = а? ;

Y = b

да | ? -

Это согласуется с теорией, где несвязанная переменная означает, что любое значение может быть заменено этой переменной.

1 голос
/ 03 января 2009

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...