繁体   English   中英

如何摆脱常见Lisp中的funcall

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM