Je dois implémenter stac dans Prolog, mais SANS utiliser la liste. Chaque élément de la pile doit pointer vers avant l'élément.
Est-il possible de le faire? Puis-je définir des règles dans le programme d'exécution? (Comme:?. element('foo','bar').
où foo est le contenu de la barre d'extrémité de l'élément est pointeur vers un autrePROLOG - Comment implémenter la pile?
Répondre
pointeur dans la pile Je pense que vous avez la définition mêlé Je pense que vous voulez dire la liste chaînée
Liste de liens est une donnée. structure dans laquelle un élément pointe à l'élément suivant, entraînant une croissance très flexible et retrait des données.
Stack est une structure de données qui utilise la dernière en premier sorti.
et oui pile peut être écrit sans liste, et ainsi liste chaînée, la liste Array est moins polyvalente que la liste chaînée mais aucune moins, il a la plupart des fonctionnalités de la liste liée.
Alors, quel est le problème? Votre question est déjà la réponse. Votre 'bar'
doit contenir element(X,Y)
ou une sorte de bottom
.
stack_empty(bottom).
stack_push(S, X, element(X, S)).
revlist_push(S0, [], S0).
revlist_push(S0, [X|T], S):-
stack_push(S0, X, S1),
revlist_push(S1, T, S).
revlist_pop(S0, []):- stack_empty(S0). % bottom of stack
revlist_pop(S0, [X|T]):-
stack_push(S1, X, S0), % pop - is reverse push
revlist_pop(S1, T).
revlist(L0, L):-
stack_empty(S0),
revlist_push(S0, L0, S),
revlist_pop(S, L).
En fait, les listes dans des langages tels que Prolog sont généralement représentées par des données récursives. cons(a, cons(b, cons(c, nil)))
ou simplement [a | [b | [c | [] ]]]
.
- 1. débordement de pile dans Prolog
- 2. Comment implémenter une pile générique en C#?
- 3. Comment puis-je implémenter une pile?
- 4. Comment implémenter une pile atomique avec mongoDB et Ruby
- 5. Prolog parse postfix expressions mathématiques
- 6. Prolog, en comptant à partir d'un intervalle; (SWI-PROLOG)
- 7. Question sur la liste Prolog
- 8. Comment implémenter la recherche?
- 9. Comment implémenter la pagination?
- 10. GCC - Comment réaligner la pile?
- 11. Comment puis-je implémenter, "Je suis mon propre grand-père", dans Prolog?
- 12. Prolog findall aide
- 13. Rechercher dans la pile
- 14. Comment obtenir la pile de pile dans un appareil mobile?
- 15. Prolog coupé dans la méthode
- 16. Traitement de la liste Prolog
- 17. Wildcards Prolog
- 18. Définition de type Prolog dans swi-prolog
- 19. Comment utiliser Prolog avec PHP?
- 20. La pile .NET vs pile de Windows
- 21. Prolog Beginner
- 22. remove: prolog
- 23. Comment implémenter la méthode Invoke?
- 24. Comment implémenter la connexion gmail?
- 25. Comment implémenter la fonctionnalité d'annulation?
- 26. Obtenir la liste des solutions dans Prolog
- 27. Comment implémenter searchbox comme dans le site Web de débordement de pile?
- 28. Enregistrer la sortie de l'exécution de Prolog
- 29. Comment implémenter des structures de données comme pile/file d'attente en VHDL?
- 30. Comment afficher la pile d'appels avec DTrace
... mais dans Stack, l'élément doit aussi avoir un pointeur vers un autre élément! Pile sur les tableaux est inutile alors je voulais dire Stack comme liste liée http://en.wikipedia.org/wiki/Stack_(data_structure)#Implementation – Rick
si vous faites en sorte que l'index suivant est l'élément suivant, ce ne sera pas un problème . Et pile dans sa nature est au format tableau. Avoir un pointeur en pile est inutile. Mais si vous voulez vraiment faire une pile où il y a un pointeur vers l'élément suivant, vous pouvez le faire oui, bien que son efficacité soit discutable. plusieurs façons de le faire, mais depuis que je suis un gars mathématique, j'aurais un nombre impair en tant qu'élément et même numéro index comme un pointeur vers l'indice suivant ou l'élément suivant. Ou vous pouvez faire entièrement nouvel objet avec itérateur. – Anatoli
"Et la pile dans sa nature est au format tableau." Dit qui? Les listes à lien unique fonctionnent parfaitement comme des piles. – sepp2k