2017-12-27 3 views
0

Ich versuche, durch diese Prolog problem zu arbeiten, jedoch kämpfe ich um meine Lösung zu arbeiten und fragte mich, ob jemand mir helfen könnte, das zu beheben Fehler - example trace. Hier ist mein Code so weit;Versuche, Variablen zu verschiedenen Elementen in einer Liste von Listen mit Prolog zuzuweisen/zu extrahieren

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). 

BEARBEITEN: PROBLEM BEHOBEN. Lösung: working code

+0

Die Spur zeigt das Problem ist die Vereinheitlichung. Ändern Sie die Klammern. –

+0

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

Antwort

0

Sie müssen eckige Klammern an paranthesis in einigen Plätzen ersetzen. Hier ist der komplette Code, der auf swi-prolog perfekt läuft. Ich habe einen Schnitt hinzugefügt und einige Anweisungen zur Optimierung gemischt.

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). 
Verwandte Themen