我正在阅读 Paul Graham 的On Lisp,并尝试在 Emacs Lisp 中实现这些功能。其中之一是扁平化:
(flatten '(a (b c) ((d e) f)))
;; Returns:
(a b c d e f)
然而由于某种原因,Paul Graham 给出的实现在 Emacs Lisp 上不起作用(总是返回 nil):
(defun flatten (x)
(cl-labels ((rec (x acc))
(cond ((null x) acc)
((atom x) (cons x acc))
(t (rec (car x) (rec (cdr x) acc)))))
(rec x nil)))
(flatten '(1 (3)))
;; Returns:
nil
和ELisp的动态绑定有关系吗?这段代码有什么问题?