[英]How to get rid of funcall in common lisp
根据此文档: 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)
不,没有。
您还可以将其视为功能:它使函数对象的调用变得明确,并提高了源代码的可理解性。
但是,您可以使用以下方式(不确定为什么会这样,但是键入的字符数将与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
如果遇到带括号的变量名, 可能会给您带来一些问题。 当然,使用它取决于您,请警告您自己。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.