我正在阅读SICP,并参考其
Exercise 1.10. The following procedure computes a mathematical function called Ackermann's function.
(define (A x y)
(cond ((= y 0) 0)
((= x 0) (* 2 y))
((= y 1) 2)
(else (A (- x 1)
(A x (- y 1))))))
用elisp重写
(defun A (x y)
(cond ((= y 0) 0)
((= x 0) (* 2 y))
((= y 1) 2)
(else (A (- x 1)
(A x (- y 1))))))
(A 1 10)
报告错误:
A: Symbol’s value as variable is void: else
因此请参阅elisp的控制结构,在各种替代方案中都将丢失。
能否请您提供一些提示,以cond
和else
来定义该功能
答案 0 :(得分:2)
在Emacs Lisp中,您使用t
而不是else
。在这种情况下,语言参考是开始研究的好地方... https://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html:
通常,我们希望每当前一个都不执行时执行last子句 条款成功。为此,我们使用
t
作为条件 最后一个子句,例如:(t body-forms)
。形式t
的计算结果为t
, 它永远不会nil
,因此只要cond
得到 对它。例如:(setq a 5) (cond ((eq a 'hack) 'foo) (t "default")) ⇒ "default"