Prolog:添加要设置的列表

时间:2011-09-05 05:57:23

标签: prolog

下面的谓词将项目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行显然有问题,但我无法理解。有什么提示吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

addToSet([H,T], S, S2)应为addToSet([H|T], S, S2)。实际上,您匹配的是一个包含HT的列表,而不是包含头H和尾T的列表。看起来只是一个错字。