funcall如何在Common Lisp中工作?

时间:2013-11-22 18:47:51

标签: functional-programming lisp common-lisp

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

(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)))))

1 个答案:

答案 0 :(得分:1)

此函数计算fieldL的总和。它相当于

(reduce #'+ L :key field)

或(更糟糕的是!不要这样做!)

(apply #'+ (mapcar field L))

此处field是一个从L元素中提取数值的函数; funcall是Common Lisp的工件Lisp-2:Scheme(或任何其他Lisp-1)中的(funcall field ...)看起来像(field ...)

更具体地说; funcall将第一个参数和coerces作为函数;然后它在所有其他参数上调用此函数。