2010-09-26 17 views
0

question est:comment compter nombre impair et pair avec l'aide PROLOG

lorsque nous saisissons mem ([1,2,3,4,5]).

nous obtenir la sortie comme ci-dessous:

impair = 3

même = 2

mon codage est comme ça, mais ne peut pas fonctionner. peut m'aider à vérifier où est mon erreur ??

mem (X, [X | L]). Mem (X, [élément | L]): - mem ([X, L]).

count ([], L, L).

count ([X | H], L1, L2): - écriture (pair), X% 2 = 0, nl, écriture (impair), X% 2> = 1, nl, compter ([H], [X | L1], L2).

merci pour votre aide.

Répondre

2

Les procédures que vous avez écrites font deux choses différentes et ne correspondent pas réellement. mem/2 est équivalent au member/2 habituellement construit sauf que votre définition contient une erreur: dans la deuxième clause element est un atome au lieu d'une variable de sorte qu'il ne correspondra pas aux autres éléments de la liste. La définition habituelle est

member(X, [X|_]). 
member(X, [_|L]) :- member(X, L). 

Notez que cette définition ne testera pas que si un terme est un élément d'une liste, mais peut même être utilisé pour générer une liste.

Qu'est-ce que vous essayez exactement de faire dans count/3: diviser la liste en deux listes, l'une contenant impair et l'autre contenant même; ou compte le nombre d'éléments pairs et impairs? La division pourrait se faire avec quelque chose comme:

count([], [], []). 
count([X|L], O, E) :- X rem 2 =/= 0, count(L, [X|O], E). 
count([X|L], O, E) :- X rem 2 =:= 0, count(L, O, [X|E]). 

Notez que =/= /2 et =:=/2 évaluation de la force des arguments comme des expressions arithmétiques en = /2 tente d'unifier ses arguments.

Le comptage du nombre de cotes et d'événements peut être fait de la même manière, et est laissé comme un exercice pour le lecteur. :-)

Questions connexes