Prologue-itérer sur la liste
Disons que j'ai la liste Xs = [a,b,c].
Maintenant, je veux parcourir tous les éléments et d'en appeler une autre fonction de ces éléments. Ma question est: comment faire en utilisant la tête et la queue? Je vous serais reconnaissant de l'aide.
Pour une chose, la carte est votre ami
Si vous supprimer la restriction des
Si vous supprimer la restriction des
head
et tail
, vous pouvez faire une boucle sur les éléments de la liste en utilisant simplement fail
et la disjonction: member(X, [1,2,3,4]), writeln(X), fail; true.
imprime les éléments de la liste un par un, et l'objectif sera de réussir.OriginalL'auteur Dago | 2015-06-12
Vous devez vous connecter pour publier un commentaire.
En général, vous n'avez pas parcourir en Prolog. Au lieu de cela, vous écrivez une règle avec une paire de récursive clauses, comme ceci:
La première clause processus de la base de cas, lorsque la liste
[]
est vide. Dans ce cas, il n'y a rien à faire, de sorte que le corps de la règle est vide.Le deuxième paragraphe traite le cas où votre liste a au moins un élément. Syntaxe
[H|T]
unifie avec votre liste de telle manière queH
devient la tête de la liste, etT
devient sa queue. Par exemple, si vous traitezdosomething([a,b,c])
,H
devienta
, etT
devient[b,c]
.Le corps de cette règle comporte deux parties. La première partie fonctionne sur la tête, appelant
process
sur elle. C'est la règle que vous souhaitez exécuter pour chaque élément de la liste. La deuxième partie invoquedosomething
règle de manière récursive sur la queue de la liste. Lorsque la queue de la liste n'est pas vide, la deuxième clause dedosomething
permettrait d'unifier avec la liste plus courte pour continuer le traitement. Lorsque la queue de la liste est vide, le premier alinéa de l'permettrait d'unifier, mettant ainsi fin au traitement.maplist(process, [a,b,c])
etmaplist/3
,maplist/4
...Vous avez absolument raison. Cependant, OP voulais savoir comment faire cela à l'aide de la tête et la queue", alors je lui ai expliqué les années 1970 façon de faire. Je pense qu'une solide compréhension de ce simple bout de code est très important pour la compréhension du Prologue de la façon de faire les choses. Bien sûr Prologue de praticiens découvrez vite
maplist/2
, et ils n'ont jamais revenir en arrière .Bien que nous devons répondre ici aux questions posées, ces questions souvent contenir des pièces qui sont mieux ignorés.
OriginalL'auteur dasblinkenlight