J'ai résolu ce moi-même. Je posterai la solution à la date d'échéance de mes devoirs. OK, je vais construire un analyseur ou un évaluateur. La norme de facto lors de l'analyse avec la notation de préfixe est d'utiliser simplement une pile. Ajouter à la pile si l'entrée est un nombre, si c'est un opérateur, vous pouvez sauter deux fois appliquer l'opérateur et mettre le résultat sur la pile.Prolog parse postfix expressions mathématiques
La pile ici serait une liste, donc j'ai besoin de savoir comment je peux appliquer les opérateurs. L'entrée serait une chaîne. "(11 + 2 *)" Ce serait 1 + 1 = 2 * 2 = 4. D'abord, il lirait 1, et 1 à la pile. Lisez-en un autre et ajoutez-le à la pile. Maintenant, il lit "+", donc il supprime (pop) deux fois de la pile et applique + et renvoie le résultat. Lisez 2, mettez 2 sur la pile. Lisez *, sautez deux fois et appliquez *.
Espérons que cela a du sens. À quoi ressemblerait le prédicat? J'ai besoin d'une variable pour la chaîne d'entrée, un pour maintenir la pile, et un pour le résultat? Trois?
Je m'interroge tout particulièrement sur les fonctions push et pop sur la pile ainsi que sur la suppression de la chaîne d'entrée.
semble assez proche de la notation polonaise inverse – Simon
Solved.Solved.Solved.Solved. – Algific
Prendre soin de poster la solution? –