我正在做SICP的练习1.4
练习1.4。请注意,我们的评估模型允许运算符为复合表达式的组合。使用此观察来描述以下过程的行为:
#+begin_src emacs-lisp :session sicp :lexical t
(defun a-plus-abs-b(a b)
((if (> b 0) + -) a b))
(a-plus-abs-b 9 4)
#+end_src
运行并得到错误
a-plus-abs-b: Invalid function: (if (> b 0) + -)
出什么问题了?
答案 0 :(得分:1)
在Emacs Lisp中,您需要这样做:
(defun a-plus-abs-b (a b)
(funcall (if (> b 0) '+ '-) a b))
那是因为Emacs Lisp是Lisp-2。