Avez-vous des conseils pour écrire un dialecte/interprète Lisp en Python? Je voudrais commencer avec juste quelques commandes de base, comme set
, print
, et define
ou quelque chose.écrire dialecte lisp
1
A
Répondre
4
Découvrez How to Write a Lisp Interpreter in Python.
6
Il existe un interpréteur Scheme entièrement fonctionnel en Python here. Sa principale « boucle eval » est juste ceci:
def _eval(self, expr, env):
if DEBUG: print('~~~~ Eval called on %s [%s]' % (expr_repr(expr), type(expr)))
if DEBUG: print('Env:')
if DEBUG: pprint.pprint(env.binding)
# Standard Scheme eval (SICP 4.1.1)
#
if is_self_evaluating(expr):
return expr
elif is_variable(expr):
return env.lookup_var(expr.value)
elif is_quoted(expr):
return text_of_quotation(expr)
elif is_assignment(expr):
env.set_var_value(
var=assignment_variable(expr).value,
value=self._eval(assignment_value(expr), env))
return None
elif is_definition(expr):
env.define_var(
var=definition_variable(expr).value,
value=self._eval(definition_value(expr), env))
return None
elif is_if(expr):
predicate = self._eval(if_predicate(expr), env)
if predicate == Boolean(False):
return self._eval(if_alternative(expr), env)
else:
return self._eval(if_consequent(expr), env)
elif is_cond(expr):
return self._eval(convert_cond_to_ifs(expr), env)
elif is_let(expr):
return self._eval(convert_let_to_application(expr), env)
elif is_lambda(expr):
return Procedure(
args=lambda_parameters(expr),
body=lambda_body(expr),
env=env)
elif is_begin(expr):
return self._eval_sequence(begin_actions(expr), env)
elif is_application(expr):
return self._apply(
self._eval(application_operator(expr), env),
self._list_of_values(application_operands(expr), env))
else:
raise self.InterpretError("Unknown expression in EVAL: %s" % expr)
Quasiment votre manuel Scheme boucle eval, mais ce code est réel qui fonctionne. Le code de Bob est très clair, et si vous avez d'autres questions n'hésitez pas à me demander.
+0
merci! :) cela s'est avéré très utile – tekknolagi
Questions connexes
- 1. est Haskell un dialecte Lisp
- 2. Dialecte de Lisp dans Emacs
- 3. Aidez-moi à écrire mon LISP :) Environnements LISP, Ruby Hashes
- 4. Lisp: Comment écrire un ordre supérieur Fonction
- 5. chaîne écrire dans le fichier dans Lisp
- 6. Quel dialecte de LISP est écrit «Paradigmes de programmation d'intelligence artificielle»?
- 7. Dialecte du fichier Ecore
- 8. dialecte SimpleDB pour NHibernate
- 9. Livre pour apprendre à écrire des macros Clojure/Lisp
- 10. comment écrire une macro « destructrice » de dolist en Lisp
- 11. problème de dialecte dans nhibernate
- 12. dialecte sql dans OpenOffice Base
- 13. Emacs Lisp coloration syntaxique
- 14. Classes en Lisp
- 15. strtotime pour Emacs Lisp
- 16. Client de savon Lisp
- 17. Pointeurs en Lisp?
- 18. Lisp Insert Sorting Problème
- 19. erreur dialecte nhibernate: semble être un bug
- 20. Récupérer le dialecte d'hibernation détecté automatiquement
- 21. décodage lisp?
- 22. LISP Backtracking
- 23. Lisp Executable
- 24. références variables dans Lisp
- 25. Fonction LISP pour supprimer nils
- 26. ebean en jeu 2 framework avec dialecte SQL
- 27. Quelle est la différence entre Lisp-1 et Lisp-2?
- 28. Emacs Lisp: l'imbrication dépasse `max-lisp-eval-depth 'dans ibuffer
- 29. Recherche dans BST en Lisp
- 30. Programme lisp pour hexadécimal à décimal
c'est un exercice de programmation. – tekknolagi
Désolé, j'ai mélangé le lien. Vérifiez à nouveau maintenant. –
Je sais, je suis de bons amis avec Peter. Il est mon voisin, en fait. Conseil? Il a été occupé ces derniers temps. – tekknolagi