下面的谓词将项目X添加到列表S中。它工作正常。
addToSet(X, S, S) :-
atomic(X),
member(X, S),
!.
addToSet(X, S, [X|S]) :-
atomic(X).
我试图将它扩展为一个谓词,它将列表[H | T]添加到集合S.如果[H | T]只有2个项目长,那就完美了...即如果T也是原子的。
addToSet([], S, S).
addToSet([H,T], S, S2) :-
addToSet(H, S, S1),
addToSet(T, S1, S2).
例如,addToSet([5,6],[1,2,3,4],X)。按我的意愿行事。但是,addToSet([5,6,7],[1,2,3,4],X)。根本不起作用。我很难过......我的代码的最后2-3行显然有问题,但我无法理解。有什么提示吗?
谢谢!
答案 0 :(得分:3)
addToSet([H,T], S, S2)
应为addToSet([H|T], S, S2)
。实际上,您匹配的是一个包含H
和T
的列表,而不是包含头H
和尾T
的列表。看起来只是一个错字。