4

这与这个问题有关:elisp functions as parameters and as return value

(defun avg-damp (n)
   '(lambda(x) (/ n 2.0)))

任何一个

(funcall (avg-damp 6) 10)

或者

((avg-damp 6) 10)

他们分别给出了Symbol's value as variable is void: n和的错误eval: Invalid function: (avg-damp 6)

4

1 回答 1

8

第一种形式不起作用的原因n是动态绑定,而不是词法绑定:

(defun avg-damp (n)
  (lexical-let ((n n))
    (lambda(x) (/ x n))))
(funcall (avg-damp 3) 12)
==> 4

第二种形式不起作用的原因是 Emacs Lisp 和 Common Lisp 一样,是“lisp-2”,而不是“lisp-1”

于 2013-05-02T17:51:31.963 回答