摆脱funcall的根据这份文件:http://cl-cookbook.sourceforge.net/functions.html如何Common Lisp中
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我不得不使用funcall调用(加法器12),这是非常无视于funcall遍地写,是有什么办法可以在方案中写出类似的代码:
((adder 12) 1)
摆脱funcall的根据这份文件:http://cl-cookbook.sourceforge.net/functions.html如何Common Lisp中
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我不得不使用funcall调用(加法器12),这是非常无视于funcall遍地写,是有什么办法可以在方案中写出类似的代码:
((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
这可能给你一些如果你会遇到一个带括号的变量名称的问题。当然,使用它取决于你,考虑自己的警告。
这是最好的答案。推论:如果你想写计划,写计划。 – jwmc