你有什麼建議在Python中編寫Lisp方言/解釋器嗎?我想從幾個基本命令開始,比如set
,print
和define
什麼的。寫lisp方言
Q
寫lisp方言
1
A
回答
4
6
Python中有一個全功能的Scheme解釋器here。它的主要「評估循環」就是這樣:
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)
你的教科書計劃eval循環,但這是實際的代碼,工作。 Bob的代碼非常注重清晰度,如果您有其他問題,請隨時問我。
+0
謝謝! :)這證明非常有幫助 – tekknolagi 2011-06-04 17:19:41
相關問題
- 1. Emacs Lisp的方案方言
- 2. OS X Scheme語言(lisp的方言)
- 3. 哈斯克爾是一種Lisp方言
- 4. 寫VS在LISP
- 5. LISP的哪一種方言是'The Little Lisper'[3rd Edn]寫的? (當時)
- 6. 如何編譯和運行用T編寫的程序(Lisp的一種方言)
- 7. 轉化Lisp語言到C++
- 8. Lisp語言 - setq和汽車
- 9. Lisp語言的功能
- 10. (撰寫)在Common Lisp
- 11. Lisp語言:如何寫一個高階函數
- 12. 用Lisp編寫一個正式的語言解析器
- 13. Lisp語言 - 編寫評估圖形節點的功能標籤
- 14. 用Lisp以外的語言編寫Emacs擴展
- 15. 這是什麼意思一種語言是LISP的一種方言?
- 16. LISP的哪種方言是「人工智能編程的範例」?
- 17. 用於Windows的靜態類型Lisp類型推理方言?
- 18. 寫在文件的Common Lisp
- 19. 編寫遞歸GCD用Lisp
- 20. 在Common Lisp中編寫++宏
- 21. Lisp語言列表操作問題
- 22. 如何以LISP語言實現堆棧
- 23. Lisp(Scheme)Newton方法
- 24. LISP追加方法
- 25. 如何爲SQLAlchemy編寫外部方言?
- 26. 如何編寫自定義nHibernate方言?
- 27. Scheme和Common Lisp之間的實際區別是什麼? (或Lisp的任何其他兩種方言)
- 28. Lisp中的平方和
- 29. 寫programmung語言
- 30. 如何編寫Lisp/Scheme代碼?
這是一個編程練習。 – tekknolagi 2011-06-04 07:42:22
對不起,我混淆了鏈接。現在再檢查一次。 – 2011-06-04 07:44:15
我知道,我是彼得的好朋友。其實,他是我的鄰居。建議嗎?他最近很忙。 – tekknolagi 2011-06-04 07:46:40