2010-12-11 70 views
0

J'essaie de comprendre comment ajouter des éléments pairs dans une liste (j'ai étudié des exemples mais je ne peux pas le faire tout seul, j'ai besoin de votre aide pour épingler bas mon manque de compréhension à une zone spécifique).Ajouter des éléments pairs dans Prolog- Problème avec la variable 'amt'

L'entrée que j'ai utilisée est start ([1,2,3,4,5]). Il n'y a pas d'erreur de compilation, mais je n'ai pas de sortie. Je ne suis pas sûr de ce que l'erreur logique est.pourriez-vous s'il vous plaît aviser?

(s'il vous plaît voir ci-dessous pour la dernière mise à jour, après la révision de mon code, maintenant il fonctionne et le problème réside dans la façon dont je l'utilise « amt », mais je ne sais pas pourquoi!)

originale code qui n'a pas fonctionné:

start(X):- add(X,1,amt), write(amt). 

add([],_,0). 
add([H|Tail],Cnt,amt):- 
    T is (Cnt mod 2), T == 0, Cnt1 is Cnt + 1, add(Tail,Cnt1,Y), amt is H+Y; 

    T is (Cnt mod 2), T =\=0, Cnt1 is Cnt + 1, add(Tail, Cnt1, amt). 

Dernière mise à jour:

I remplacé 'amt' avec un 'S', et ça marche! Mais pourquoi wldnt travailler avec 'amt'?

est ici le code révisé qui fonctionne:

start(X):- add(X,1,S), write(S). 

add([],_,0). 
add([H|Tail],Cnt,S):- 
    T is (Cnt mod 2), T == 0, Cnt1 is Cnt + 1, add(Tail,Cnt1,Y), S is H+Y; 

    T is (Cnt mod 2), T =\=0, Cnt1 is Cnt + 1, add(Tail, Cnt1, S). 

Merci :)

Répondre

1

Êtes-vous Acceptant d'afficher AMT1?

+0

oui, amt1 est censé ajouter les éléments pairs et être affiché. – Roy

+0

J'ai révisé le code, j'ai essayé de travailler sur la partie récursive et j'ai corrigé la variable 'amt1' qui ne correspondait pas auparavant, ne donnant toujours pas de résultat. – Roy

+0

okay, donc j'ai repéré le problème à la variable 'amt' ... savez-vous pourquoi je ne peux pas utiliser 'amt' et devez utiliser une seule variable instd? – Roy