根据这个文件:http ://cl-cookbook.sourceforge.net/functions.html
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我必须使用funcall来调用(adder 12),并且一遍又一遍地编写funcall是非常忽略的,有没有办法在scheme中编写类似的代码:
((adder 12) 1)
根据这个文件:http ://cl-cookbook.sourceforge.net/functions.html
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我必须使用funcall来调用(adder 12),并且一遍又一遍地编写funcall是非常忽略的,有没有办法在scheme中编写类似的代码:
((adder 12) 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
如果您遇到带有括号的变量名,这可能会给您带来一些问题。当然,使用它取决于您,请考虑自己警告。