Even und Odd-Listen

Ich versuche zu implementieren ist ein Prolog-Programm, das aufteilen einer Liste in zwei Listen. Die erste enthält die zahlen selbst in Positionen, und die zweite die Zahl ist ungerade Positionen.

E. g.: even_odd([1,2,4,7,5],Even,Odd). führt Even=[2,7]. und Odd=[1,4,5].

Habe ich gefunden elegantere Lösungen als meine, googeln das problem, jedoch möchte ich, um herauszufinden, wo das problem liegt mit in meinem code (wahrscheinlich Betreiber Missbrauch), weil ich wirklich glaube, ich habe ein sehr schlechtes Verständnis von Prolog die Betreiber (vor allem in der Arithmetik-Vergleich). Auch googeln, es macht es nur noch schlimmer, jede Webseite hat eine völlig andere Erklärung.

Mein code:

even_odd([], [], []).
even_odd([H|T], Even, Odd) :-
    length([H|T], X),
    X mod 2 is 0,
    append(Even1, H, Even),
    even_odd(T, Even1, Odd).
even_odd([H|T], Even, Odd) :-
    length([H|T], X),
    X mod 2 is 1,
    append(Odd1, H, Odd),
    even_odd(T,Even,Odd1).

Ich habe versucht, tracing und ich weiß, das problem liegt in der X mod 2 is 1 oder 0 keiner von Ihnen ist jemals wahr. Wenn ich eine Liste mit drei Elementen, und ändern Sie die Bedingung zu X is 3 es ist völlig in Ordnung, aber die Teilung scheint es Durcheinander, so dass jeder Ideen?

InformationsquelleAutor Angelos Chalaris | 2014-01-17

Schreibe einen Kommentar