gpt4 book ai didi

Lisp:报价评估

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:38 26 4
gpt4 key购买 nike

以下哪个表达式的 lisp 语法正确?

(+ 1 (quote 1))
==> 1 (???)
(+ 1 (eval (quote 1))
==> 2

我目前正在编写自己的 lisp 解释器,不太确定如何正确处理引号。我看过的大多数 lisp 解释器都将这两个表达式都计算为“2”。但是,难道不应该根本不对报价进行评估,从而只有第二个报价是合法的表达方式吗?为什么它仍然有效?这是某种语法糖吗?

最佳答案

除了特殊形式外,大多数 Lisp 语言首先计算参数,然后应用函数(因此是 eval-and-apply 短语)。

您的第一个表单 (+ 1 '1) 将首先评估其参数 1'1。常量数字对其自身求值,而引号对它引用的值求值,因此您只能将 + 应用于 11,得到2

eval: (+ 1 (quote 1))
eval 1st arg: 1 ==> 1
eval 2nd arg: '1 ==> 1
apply: (+ 1 1) ==> 2

第二种形式类似,未加引号的 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

关于Lisp:报价评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7609954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com