2012-10-31 19 views
7

J'essaie d'ajouter un élément à la fin d'une liste dans prolog, mais il continue à échouer.Comment ajouter à la fin de la liste dans prolog

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).  

letters([a,b,c]). 

Je ne comprends pas pourquoi ce qui suit ne fonctionne pas.

insertAtEnd(d,letters(Stored),letters(Stored)). 

Je suis aussi essayez de stocker cette liste dans la variable stockée à travers, mais je ne sais pas si ce qui précède est bonne façon de procéder.

+0

La nécessité d'insérer un élément à la fin d'une liste suggère fortement que vous regardez dans les * listes de différences *, ce qui vous donnera l'insertion O (1). –

Répondre

3

Prolog implémente un modèle de calcul relationnel, et les variables peuvent uniquement être instanciées, non affectées. Essayez

?- letters(Stored), 
    insertAtEnd(d, Stored, Updated), 
    write(Updated). 
+0

La liste d'origine n'est donc pas modifiable? Disons que je reçois une autre lettre e, je devrais appeler insertAtEnd (e, Updated, UpdatedAgain)? J'essaie d'utiliser un prédicat pour mettre à jour la liste sans la console. – MeowMeow

+1

Oui, c'est un moyen inhabituel d'effectuer des calculs. C'est étroitement lié à la programmation déclarative. Prolog trouve les règles de liaison aux règles applicables, lorsqu'il a besoin de trouver des alternatives, il commence à défaire les liaisons établies précédemment. – CapelliC

1

vous pouvez utiliser append et de mettre votre article en tant que deuxième liste

comme ceci:

insertAtEnd (X, Y, Z): - append (Y, [X], Z).

+0

Bien que cela puisse être un indice précieux pour résoudre le problème, une réponse a vraiment besoin d'un peu plus de détails que cela. S'il vous plaît [edit] pour expliquer comment cela va résoudre le problème. Vous pouvez également écrire ceci comme commentaire. –