首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Common Lisp中funcall是如何工作的?

在Common Lisp中funcall是如何工作的?
EN

Stack Overflow用户
提问于 2013-11-23 02:47:51
回答 1查看 115关注 0票数 0

我不明白在这个例子中funcall会做什么。我需要一个关于代码何时执行的解释。

代码语言:javascript
复制
(defun total-value (field L)
  "Answer average value of fields of complex entries in list L"
  (if (null L)
    0
    (+ (funcall field (first L))
       (total-value field (rest L)))))
EN

回答 1

Stack Overflow用户

发布于 2013-11-24 13:08:24

此函数用于计算L中的field的和。它等同于

代码语言:javascript
复制
(reduce #'+ L :key field)

或者(更糟!永远不要这样做!)

代码语言:javascript
复制
(apply #'+ (mapcar field L))

这里,field是从L的元素中提取数值的函数;funcall是Common Lisp为Lisp-2的产物: Scheme (或任何其他Lisp-1)中的(funcall field ...)看起来像(field ...)

更具体地说,funcall接受第一个参数并将其coerces到一个函数中;然后在所有其他参数上调用该函数。

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

https://stackoverflow.com/questions/20152261

复制
相关文章

相似问题

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