2010-04-29 20 views
1

Été assis ici pendant des heures juste en regardant fixement ce code et n'ai aucune idée de ce que je fais mal. Je sais ce qui se passe en traçant le code (il se passe une boucle éternelle quand il frappe verbPhrase). Tous les conseils sont plus que bienvenus. Je vous remercie.Prologue: Phrase Parser

% Knowledge-base 
det(the). 
det(a). 

adjective(quick). 
adjective(brown). 
adjective(orange). 
adjective(sweet). 

noun(cat). 
noun(mat). 
noun(fox). 
noun(cucumber). 
noun(saw). 
noun(mother). 
noun(father). 
noun(family). 
noun(depression). 

prep(on). 
prep(with). 

verb(sat). 
verb(nibbled). 
verb(ran). 
verb(looked). 
verb(is). 
verb(has). 

% Sentece Structures 
sentence(Phrase) :- 
     append(NounPhrase, VerbPhrase, Phrase), 
     nounPhrase(NounPhrase), 
     verbPhrase(VerbPhrase). 

sentence(Phrase) :- 
verbPhrase(Phrase). 

nounPhrase([]). 

nounPhrase([Head | Tail]) :- 
det(Head), 
nounPhrase2(Tail). 

nounPhrase(Phrase) :- 
nounPhrase2(Phrase). 

nounPhrase(Phrase) :- 
append(NP, PP, Phrase), 
nounPhrase(NP), 
prepPhrase(PP). 

nounPhrase2([]). 

nounPhrase2(Word) :- 
noun(Word). 

nounPhrase2([Head | Tail]) :- 
adjective(Head), 
nounPhrase2(Tail). 

prepPhrase([]). 

prepPhrase([Head | Tail]) :- 
prep(Head), 
nounPhrase(Tail). 

verbPhrase([]). 

verbPhrase(Word) :- 
verb(Word). 

verbPhrase([Head | Tail]) :- 
verb(Head), 
nounPhrase(Tail). 

verbPhrase(Phrase) :- 
append(VP, PP, Phrase), 
verbPhrase(VP), 
prepPhrase(PP). 

Répondre

1

I figured it out maintenant, après un peu de pêche à la traîne Internet, donc répondra ici si quelqu'un d'autre se bat avec elle.

Le problème était que l'ajout était en train de créer une liste vide. Cette liste a été passée en paramètre, puis divisée à nouveau en deux listes vides. Et cela a été répété encore et encore. Pour arrêter ceci, à chaque fois que la fonction append est utilisée, il faut vérifier si les listes sont vides.

Par exemple

verbPhrase(Phrase):- 
append(VP, PP, Phrase), 
VP \= [], 
PP \= [], 
verbPhrase(VP), 
prepPhrase(PP).