所以,我仍然不完全理解prolog中的列表和递归是如何工作的,这可能是我遇到麻烦的原因,但我甚至不知道如何开始这个问题。
有一份朋友名单。
f(a,b).
f(a,c).
f(a,d).
f(b,c).
f(b,e).
f(b,f).
f(c,e).
f(c,g).
f(g,e).
etc..
如果我做了的话
fof(a,e, List).
那我应该
List = [a, b, e];
List = [a, c, e];
List = [a, c, g, e]; <-- anything past this point won't work
所以基本上你检查一下自己,然后看看你的朋友是不是和person2的朋友,然后看看他们的朋友是不是和person2的朋友,如果他们是,那么就添加到一个列表中。
好吧,我得到了和我需要的相似的东西。
fb(X,X,_).
fb(X,Y,List) :-
friend(X,Y),
X \== Y,
List = [X,Y].
fb(X,Y,List) :-
friend(X,Z),friend(Z,Y),
X \== Y, X \== Z, Z \== Y,
List = [X,Z,Y].
fb(X,Y,List) :-
friend(X,Z),friend(Z,Q),friend(Q,Y),
X \== Y,X \== Z, X \== Q, Z \== Q, Z \== Y, Q \== Y,
List = [X,Z,Q,Y].
这似乎是可行的,但我似乎可以用递归来压缩它,只是不确定如何压缩。