在prolog中反转事实并显示它们

时间:2013-04-28 08:49:21

标签: prolog fact

如果我有以下内容:

friends(tim,joe).

如果我去:

?- friends(X,Y).

我会得到:

X=tim
Y=joe

如果不添加任何新事实,我需要打印以下内容

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

1 个答案:

答案 0 :(得分: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.

但实际上,真的 真的 只是 伪造 。 Ughgh。你填空了。