我正在尝试在 emacs lisp 中编写一些我的第一个代码,但我无法理解以下行为
(defun sq (x) (* x x))
(member 9 '(1 2 3 4 (sq 3)))
这评估为nil
但我期望的值是(9)
现在我猜* emacs lisp 使用应用顺序评估,那么为什么在应用函数之前没有评估列表?
因为我只需要它来测试一个非零条件,我终于可以让它工作如下,
(member 9 (cons (sq 3) '(1 2 3 4)))
评估为(9 1 2 3 4)
我的问题是这是否有效,因为(sq 3)
它是一个函数(缺点)的“直接”参数,与前面的示例不同,它是参数中的一个元素?在这里使用cons
可接受的解决方法还是有更好/正确的方法来获得所需的行为?
* 虽然无法确定 emacs lisp 使用什么顺序评估,但我在方案解释器中尝试了相同的表达式并得到了相同的答案,并且从 SICP 我知道该方案使用应用顺序评估。现在我真的真的很困惑!
任何帮助表示赞赏。