a-plus-abs-b: 无效函数: (if (> b 0) + -)
a-plus-abs-b: Invalid function: (if (> b 0) + -)
我正在做 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) + -)
有什么问题?
在 Emacs Lisp 中你需要这样做:
(defun a-plus-abs-b (a b)
(funcall (if (> b 0) '+ '-) a b))
那是因为 Emacs Lisp 是 Lisp-2.
我正在做 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) + -)
有什么问题?
在 Emacs Lisp 中你需要这样做:
(defun a-plus-abs-b (a b)
(funcall (if (> b 0) '+ '-) a b))
那是因为 Emacs Lisp 是 Lisp-2.