首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何摆脱common lisp中的funcall

如何摆脱common lisp中的funcall
EN

Stack Overflow用户
提问于 2012-10-19 01:17:53
回答 2查看 310关注 0票数 2

根据这篇文档:http://cl-cookbook.sourceforge.net/functions.html

代码语言:javascript
复制
(defun adder (n)
  (lambda (x) (+ x n)))
(funcall (adder 12) 1)

我不得不使用funcall来调用(加法器12),而且一遍又一遍地写funcall是非常忽略的,有没有办法在scheme中写出像这样的代码:

代码语言:javascript
复制
((adder 12) 1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-19 01:52:45

不是的。没有。

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

票数 6
EN

Stack Overflow用户

发布于 2012-10-19 21:56:19

但是,您可以使用这样的内容(不确定为什么要这样做,但键入的字符数将与Scheme中的相同):

代码语言:javascript
复制
(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

如果你会遇到一个带括号的变量名,这可能会给你带来一些问题。当然,使用它是由你自己决定的,考虑到你自己被警告了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12960190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档