2

根据这个文件: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)
4

2 回答 2

6

没有。没有。

您还可以将其视为一项功能:它使函数对象的调用显式并提高了源代码的可理解性。

于 2012-10-18T17:52:44.707 回答
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

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

于 2012-10-19T13:56:18.927 回答