Prolog: wie Schreibe (und Verwendung) einer Funktion, die Listen alle Listen-Permutationen?

Habe ich gefunden, so ein Beispiel der naiven Art, geschrieben in prolog und ich bin versucht, es zu verstehen:

naive_sort(List,Sorted):-perm(List,Sorted),is_sorted(Sorted).

is_sorted([]).
is_sorted([_]).
is_sorted([X,Y|T]):-X=<Y,is_sorted([Y|T]).


perm(List,[H|Perm]):-delete(H,List,Rest),perm(Rest,Perm).
perm([],[]).

delete(X,[X|T],T).
delete(X,[H|T],[H|NT]):-delete(X,T,NT).

Naive_sort Aufruf korrekt funktioniert, aber ich kann einfach nicht herausfinden, warum. Das Hauptproblem ist die permutation. Wenn Sie aufgerufen wird, implizit, es gibt immer nur einen Wert. Wie ist es dann möglich, dass in naive_sort Funktion rufen Sie alle Permutationen überprüft werden? Auch, wie könnte ich das ändern perm-Funktion schreiben, die alle Permutationen?

InformationsquelleAutor agnieszka | 2010-02-04
Schreibe einen Kommentar