a-plus-abs-b:无效的函数:(如果(> b 0)+-)

时间:2019-12-03 10:08:41

标签: scheme lisp elisp sicp

我正在做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) + -)

出什么问题了?

1 个答案:

答案 0 :(得分:1)

在Emacs Lisp中,您需要这样做:

(defun a-plus-abs-b (a b)
  (funcall (if (> b 0) '+ '-) a b))

那是因为Emacs Lisp是Lisp-2