根据这份文件:http://cl-cookbook.sourceforge.net/functions.html
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我必须使用funcall来调用(加法器12),并且忽略了反复编写funcall,有没有办法在方案中编写类似的代码:
((adder 12) 1)
答案 0 :(得分:6)
没有。没有。
您还可以将其视为一项功能:它可以显式调用函数对象,并提高源代码的可理解性。
答案 1 :(得分:1)
但是,您可以使用这样的东西(不知道为什么会这样,但输入的字符数与Scheme中的字符数相同):
(set-macro-character
#\[
#'(lambda (stream char)
(declare (ignore char))
(set-syntax-from-char #\] #\;)
(let ((forms (read-delimited-list #\] stream t)))
(set-syntax-from-char #\] #\x)
(append '(funcall) forms))))
(defun adder (n)
#'(lambda (x) (+ x n)))
(format t "sum: ~s~&" [(adder 12) #x128]) ;; 308
如果您遇到带括号的变量名称,可能会给您一些问题。当然,使用它取决于你,请考虑自己警告。