2011-09-05 10 views
1

아래의 술어는 항목 X를 목록 S에 추가합니다. 올바르게 작동합니다.Prolog : 설정할 목록 추가

addToSet(X, S, S) :- 
    atomic(X), 
    member(X, S), 
    !. 
addToSet(X, S, [X|S]) :- 
    atomic(X). 

나는 목록에 추가하는 조건으로 연장하는 것을 시도하고있다 [H | T] [H가 | T]를 경우가 완벽하게 작동 S.을 설정합니다 긴 단지 2 항목입니다 ... 즉, T는 경우 원자.

예를 들어, addToSet ([5,6], [1,2,3,4], X). 내가 원하는대로 일한다. 그러나 addToSet ([5,6,7], [1,2,3,4], X). 전혀 작동하지 않습니다. 나는 혼란 스럽다 ... 분명히 내 코드의 마지막 2 ~ 3 줄에 문제가 있지만 분명히 알 수는 없다. 어떤 팁?

감사합니다.

+1

swi-prolog에 대한 관련 관련 조건 자 (프롤로그 시스템에 존재하는 경우)를 확인하는 것이 좋습니다. 다음은 일부 http://www.swi-prolog.org/pldoc/doc_for?object=section%282,%입니다. 27A.12 % 27, swi % 28 % 27/doc/Manual/lists.html % 27 % 29 % 29 –

답변

3

addToSet([H,T], S, S2)addToSet([H|T], S, S2)이어야합니다. 마찬가지로 정확히 HT이 포함 된 목록이 일치하고 머리가 H이고 꼬리가 T 인 목록과 일치하지 않습니다. 마치 오타처럼 보입니다.

+0

와우 ... 너무 당황 스럽네. 나는이 물건을 한시간 이상 꼼꼼히 꼼꼼히 꼼꼼히 보았다고 맹세한다. 내가 그걸 놓쳤다는 것을 믿을 수 없어. 정말 고맙습니다! – The111

+0

우리에게 최선을 다합니다. :) – Ben