1

如果我有以下情况:

friends(tim,joe).

如果我走:

?- friends(X,Y).

我会得到:

X=tim
Y=joe

我必须在不添加任何新事实的情况下打印以下内容

X=tim
Y=joe
X=joe
Y=tim
4

1 回答 1

1

您将不得不添加一个新规则

are_friends(X,Y):- friends(X,Y).
are_friends(X,Y):- friends(Y,X).

然后你问:

?- are_friends(X,Y).

Prolog会回答

X=tim, Y=joe   _

它将等待您的进一步命令。如果按;,它将打印下一个解决方案:

X=tim, Y=joe   ;

X=joe, Y=tim   _

为了只显示结果两次——而不是以适当的 Prolog 方式产生它们——我们可以写

show_friends :- 
  friends(X,Y),
  write('X='), write(...), write(', Y='), write(...), nl,
  write('X='), write(...), write(', Y='), write(...), nl,
  fail.

但这真的,真的真的只是假装。呃。你填空。

于 2013-04-28T08:55:20.697 回答