根据这篇文档:http://cl-cookbook.sourceforge.net/functions.html
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)我不得不使用funcall来调用(加法器12),而且一遍又一遍地写funcall是非常忽略的,有没有办法在scheme中写出像这样的代码:
((adder 12) 1)发布于 2012-10-19 01:52:45
不是的。没有。
您还可以将其视为一个功能:它使函数对象的调用显式,并提高了源代码的可理解性。
发布于 2012-10-19 21:56:19
但是,您可以使用这样的内容(不确定为什么要这样做,但键入的字符数将与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如果你会遇到一个带括号的变量名,这可能会给你带来一些问题。当然,使用它是由你自己决定的,考虑到你自己被警告了。
https://stackoverflow.com/questions/12960190
复制相似问题