Pair et de l'Impair listes

Je suis en train de mettre en œuvre un programme Prolog qui va diviser la liste en deux listes. Le premier contiendra les numéros dans la même positions et la seconde le nombre est impair positions.

E. g.: even_odd([1,2,4,7,5],Even,Odd). entraînera Even=[2,7]. et Odd=[1,4,5].

J'ai trouvé plus élégant des solutions que le mien googler le problème, cependant je voudrais savoir où se trouve le problème dans mon code (probablement opérateur abus) parce que je pense vraiment que j'ai une très mauvaise compréhension de Prolog opérateurs (en particulier en arithmétique comparaison). Aussi googler il ne fait qu'empirer les choses, chaque site a une toute autre explication.

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

J'ai essayé de traçage et je sais que le problème réside dans le X mod 2 is 1 ou 0, aucun d'eux n'est jamais vrai. Si j'ai une liste de trois éléments et de la modification des conditions de X is 3 il est tout à fait acceptable, mais la division semble confus, alors, des idées?