我被困住了。有人可以告诉我我的谓词中有什么错误吗?
sizeNet([H|T],L,user,_):-
findall( Y, fullfriend(H,Y,L,user), LR),
append( L, LR, LF),
sizeNet (T, LF, user, LF).
sizeNet([],_,_,_).
fullfriend(userH,Y,L,user):-
(
relation(Utilizador,Y)
;
relation(Y,userH)
),
\+member(Y,L),
Y \== user.
如果我写
?-sizeNet([jon,soldado],[jon,soldado],jony,LF).
我的LF
是空的但是如果我调试,在结束之前谓词LF具有我需要的所有信息,但最后所有信息都消失了。如何停止递归并返回LF
的信息?
答案 0 :(得分:1)
您的代码有几个问题,但在到达列表末尾时已经正确停止了递归。
为了正确构建并向调用者报告LF,我建议
sizeNet([H|T],L,user,LTot):-
findall(Y, fullfriend(H,Y,L,user), LR),
append(L, LR, LF),
sizeNet(T, LF, user, LTot).
sizeNet([],L,_,L).
注意:sizeNet (T, LF, user, LF).
在大多数Prolog中是语法错误 - 仿函数和参数列表之间不允许空格'左括号