Common lisp 如何在commonlisp中去掉funcall

Common lisp 如何在commonlisp中去掉funcall,common-lisp,Common Lisp,根据这份文件: 我必须使用funcall调用(加法器12),一遍又一遍地写funcall是非常容易忽略的,有没有办法在scheme中编写类似的代码: ((adder 12) 1) 没有,没有 您还可以将其视为一个特性:它使函数对象的调用显式化,并提高了源代码的可理解性 但是,您可以使用类似的方式(不确定为什么要这样做,但键入的字符数与Scheme中的字符数相同): 如果遇到带括号的变量名,这可能会给您带来一些问题。当然,使用它取决于你,考虑你自己的警告。这是最好的答案。推论:如果你想写sche

根据这份文件:

我必须使用funcall调用(加法器12),一遍又一遍地写funcall是非常容易忽略的,有没有办法在scheme中编写类似的代码:

((adder 12) 1)
没有,没有


您还可以将其视为一个特性:它使函数对象的调用显式化,并提高了源代码的可理解性

但是,您可以使用类似的方式(不确定为什么要这样做,但键入的字符数与Scheme中的字符数相同):


如果遇到带括号的变量名,这可能会给您带来一些问题。当然,使用它取决于你,考虑你自己的警告。

这是最好的答案。推论:如果你想写scheme,就写scheme。
((adder 12) 1)
(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