yea*_*iii 3 lisp evaluation interpreter eval quote
以下哪个表达式具有正确的lisp语法?
(+ 1 (quote 1))
==> 1 (???)
(+ 1 (eval (quote 1))
==> 2
Run Code Online (Sandbox Code Playgroud)
我目前正在编写自己的lisp解释器,并不太确定如何正确处理引号.我看过的大多数lisp解释器都将表达式计算为"2".但是,根本不应该对报价进行评估,从而只有第二个是法律表达?那么为什么它仍然适用呢?这是某种语法糖吗?
除了特殊形式,大多数Lisps首先评估参数,然后应用函数(因此使用eval-and-apply短语).
你的第一个表格(+ 1 '1)将首先评估其论点1和'1.恒NUMERICS评价自己,而报价的计算结果为它所引用,所以你会离开应用+到1和1,产生2.
eval: (+ 1 (quote 1))
eval 1st arg: 1 ==> 1
eval 2nd arg: '1 ==> 1
apply: (+ 1 1) ==> 2
Run Code Online (Sandbox Code Playgroud)
第二种形式是相似的,未引用的1只会经历eval一次,1再次产生:
eval: (+ 1 (eval '1))
eval 1st arg: 1 ==> 1
eval 2nd arg: (eval '1)
eval arg: '1 ==> 1
apply: (eval 1) ==> 1
apply: (+ 1 1) ==> 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |