2016-12-01 5 views
1

Also muss ich einen Prolog Begriff namens doubleAll7/2 schreiben, der zwei Listen dauert. Das Programm gibt true zurück, wenn für jede 7, die in der ersten Liste auftritt, die zweite Liste zwei aufeinanderfolgende Sieben enthält. Beispiel doubleAll7([1,7,1],[1,7,7,1]) ist wahr, aber doubleAll7([1,2,7],[1,2,7]) ist falsch.Prolog überprüft, ob zwei Listen identisch sind

double7/2 verdoppelt alle Vorkommen von 7 in einer Liste und funktioniert perfekt.

Aus irgendeinem Grund gibt dieses Programm immer false zurück.

doubleAll7([H1|T1],[H2,T2]) :- 
    double7([H1|T1], L), 
     L == [H2|T2]. 

    double7([],[]). 
    double7([H|T], [H,H|Z]) :- 
    H is 7, 
    !, 
    double7(T,Z). 
    double7([H|T], [H|Z]) :- 
    double7(T,Z). 

Antwort

0

Es besteht ein offensichtlicher Fehler: Die erste Zeile

doubleAll7([H1|T1],[H2,T2]) 

doubleAll7([H1|T1],[H2|T2]) 

sein sollte I bedeuten: a | stattdessen ein , als Trennzeichen zwischen H2 und T2

Aber Entschuldigung: Ich finde dich Lösung überkompliziert.

können Sie vermeiden double7/2 (Ihren Anruf double7 ist unusefull weil, wenn ich mich nicht falsch, es äquivalent ist zu

doubleAll7(L1, L2) :- 
    double7(L1, L2). 

), können Sie is/2 vermeiden, können Sie die ! Avoi und Sie können semplify alle als

doubleAll7([], []). 

doubleAll7([7 | T1], [7, 7 | T2]) :- 
    doubleAll7(T1, T2). 

doubleAll7([H | T1], [H | T2]) :- 
    H \== 7, 
    doubleAll7(T1, T2). 
+0

Oh jeez, dass es behoben ... hatte diesen Fehler mehrmals vor gemacht und als ich es behoben hat nicht funktioniert. Ich habe es nicht wieder gelöst und konnte nicht sagen, wann ich es richtig gemacht habe – user237083

+0

@ user237083 - Ich weiß ... Ich bin ein Experte, der diese Art von Fehlern macht. – max66

Verwandte Themen