Comment ajouter des listes dans Prolog?
Comment puis-je ajouter des listes en Prolog? J'ai cherché sur Internet et j'ai trouvé ceci (à partir de http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html)
append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X).
De sorte qu'il devient le Z
en supprimant les éléments de [X|Y]
dans [X|W]
. Mais comment puis-je ajouter deux listes ensemble?
Exemple,
appendlist([1,2],[3,4,5],X).
Le résultat sera X = [1,2,3,4,5]
.
Aussi je ne sais pas ce qui se passe dans la récursivité. (J'ai tracé, mais n'en est pas à comprendre)
EDIT: Ce que je veux savoir, c'est comment il doit être codé de manière à fonctionner comme le prédéfinies append()
en Prolog.
source d'informationauteur Zik
Vous devez vous connecter pour publier un commentaire.
Le code que vous avez posté, il est (presque) OK. L'ordre des clauses juste besoin d'être échangé (afin de faire de ce prédicat définition productif, lorsqu'il est utilisé dans un générateur de mode):
Ceci définit une relation entre les trois arguments, disons
A
B
etC
.Votre première ligne dit, "
C
est le résultat de l'ajout deA
etB
siA
etC
sont non vides, listes, ils ont tous deux la même responsable (premier élément), et la queue deC
est le résultat de l'ajout de la queue deA
avec la même 2ème argument,B
".Pensez à ce sujet, il est parfaitement logique. Ce qu'il fait est, nous voulons définir la
append/3
relation, et nous savons ce que nous voulons qu'il soit, donc nous avons juste écrire quelques évidences à propos de ce que nous voulons accomplir, les lois qu'il doit suivre, si vous voulez.Donc, en supposant que nous avons ce code déjà défini pour nous, quelle est la législation doit-elle suivre? Évidemment, l'ajout d'une queue de certains de la liste avec une autre liste donne une queue de suite à l'ajout à la liste complète avec ce 2ème liste.
Ceci définit la façon dont nous "à glisser le long de" la première liste. Mais que faire si il n'y a nulle part plus à la diapositive? Que faire si nous avons atteint la fin de la liste? Ensuite, nous sommes arrivés à la liste vide, et en les ajoutant à une liste vide avec une autre liste donne la liste comme résultat. Évidemment. Et c'est ce qu'2ème ligne dans votre code est de nous dire, dit-il, "en ajoutant un liste vide avec une autre liste de produit que de liste comme le résultat".
Étonnamment, après avoir écrit ces deux lois qui
append/3
à suivre est la même que l'écriture de la définition elle-même.plus: qu'il explique, à partir d'un déclaratif point de vue; ne consultez une réponse par m09 ce qui indique que plus du point de vue opérationnel.
Vous avez répondu à votre propre question: Vous utilisez
append/3
.Si vous voulez ajouter
X
etY
et stocker le résultat dansZ
vous neSi par exemple
X = [1, 2]
etY = [3, 4, 5]
puisZ
sera lié à[1, 2, 3, 4, 5]
: