Code für Prolog-Programm um zu überprüfen, ob eine gegebene Liste ist Palindrom oder nicht, ohne die Verwendung eines reverse-Betrieb

Dies ist, wie man Palindrom mit einem reverse-Betrieb.

Prädikate

palin(list)
findrev(list,list,list)
compare(list,list)

Klauseln

palin(List1):-
    findrev(List1,[],List2),
    compare(List1,List2).

findrev([],List1,List1).

findrev([X|Tail],List1,List2):-
    findrev(Tail,[X|List1],List2).

compare([],[]):-
    write("\nList is Palindrome").

compare([X|List1],[X|List2]):-
    compare(List1,List2).    

compare([X|List1],[Y|List2]):-
    write("\nList is not Palindrome").

Aber ich möchte es ohne reverse-Betrieb. Kann jemand mir bitte helfen.

  • Ich gebe nicht die eine Lösung, aber Bedenken Sie palin(Liste):- findrev(Liste,[],Liste). Für Ihre Frage, können Sie mit append([H|Tail], [H], Pal), und verwenden Sie recursivity am Schwanz.
  • Warum wollen Sie es tun, ohne zu Reversieren? Das, was Konzept Sie sind gehen zu nehmen, nicht im code, aber zumindest in Worten?
Schreibe einen Kommentar