Приведенный ниже предикат добавляет элемент 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 строками моего кода, но я не могу понять это. Любые советы?
Спасибо!