2011-06-04 7 views
0
run([H|T]) --> num(H),run(T). 
run([T]) --> num(T). 
num(increase) --> [increase],{write(1),nl}. 
num(decrease) --> [decrease],{write(0),nl}. 

Dans cet analyseur lorsque l'augmentation est donnée, elle imprime 1, quand elle diminue, elle imprime 0. Cependant, un problème survient lors du traitement du dernier élément de la liste. Par exemple run(A,[increase],[]) imprime deux 1. run(A,[increase,decrease],[]) imprime un 1 et deux 0, une chose que je ne veux pas. Comment puis-je le faire fonctionner correctement afin que run(A,[increase],[]) imprime 1 et run(A,[increase,decrease],[]) imprime 1,0?Analyse syntaxique dans prolog

Répondre

4

Les deux clauses d'exécution // 1 correspondent dans ce cas. Pensez à changer la deuxième clause de l'exécution // 1 à:

run([]) --> []. 

Indépendamment, envisagez d'utiliser la phrase/2 (comme phrase(run(A), [increase])) pour la portabilité, au lieu d'assumer une méthode d'expansion particulière pour DCG.