2017-12-27 20 views
0

이 코드는 Prolog problem을 통해 작업하고 있지만 해결 방법을 찾는데 어려움을 겪고 있습니다. 오류 - example trace. 지금까지 내 코드가있다.프롤로그를 사용하여 목록에있는 다른 요소에 변수를 할당/추출하려고 시도했습니다.

process(L1, [H2|T2], [H2|T], Inconsistent):- 
    H2 = [Name, Number, _Info], 
    elementInList(L1, [Name, Number]), 
    process(L1, T2, T, Inconsistent). 
process(L1, [H2|T2], Consistent, [H2|T]):- 
    H2 = [Name, Number, _Info], 
    \+ elementInList(L1, [Name, Number]), 
    process(L1, T2, Consistent, T). 
process(_L1, [], [], []). 

elementInList([H|T], H). 
elementInList([H|T], E):- 
    elementInList(T, E). 

EDIT : PROBLEM FIXED. 해결책 : working code

+0

흔적이 통일이라는 것을 보여줍니다. 대괄호를 변경하십시오. –

+0

'H2 = (Name, Number, _Info)' –

답변

0

대괄호를 대소 문자로 바꾸려면 몇 군데에서 대괄호로 바꿔야합니다. swi-prolog에서 완벽하게 실행되는 완벽한 코드가 있습니다. 나는 커팅을 추가하고 최적화를 위해 명령문을 몇 번 바꿨다.

process(_L1, [], [], []):- !. 
process(L1, [H2|T2], [H2|T], Inconsistent):- 
    H2 = (Name, Number, _Info), 
    elementInList(L1, (Name, Number)), !, 
    process(L1, T2, T, Inconsistent). 
process(L1, [H2|T2], Consistent, [H2|T]):- 
    H2 = (Name, Number, _Info), 
    \+ elementInList(L1, (Name, Number)), 
    process(L1, T2, Consistent, T). 

elementInList([H|_], H):- !. 
elementInList([_|T], E):- 
    elementInList(T, E).