RNA*_*RNA 2 lisp elisp return function
这与此问题有关:elisp用作参数和返回值
(defun avg-damp (n)
'(lambda(x) (/ n 2.0)))
Run Code Online (Sandbox Code Playgroud)
或
(funcall (avg-damp 6) 10)
Run Code Online (Sandbox Code Playgroud)
要么
((avg-damp 6) 10)
Run Code Online (Sandbox Code Playgroud)
他们给的错误Symbol's value as variable is void: n,并eval: Invalid function: (avg-damp 6)分别.
第一种形式不起作用的原因n是动态绑定,而不是词法:
(defun avg-damp (n)
(lexical-let ((n n))
(lambda(x) (/ x n))))
(funcall (avg-damp 3) 12)
==> 4
Run Code Online (Sandbox Code Playgroud)
第二种形式不起作用的原因是Emacs Lisp和Common Lisp一样,是"lisp-2",而不是"lisp-1"