如何打破Clojure中的列表?

时间:2013-03-11 11:42:54

标签: clojure

我正在做this锻炼。

这是我的解决方案:

(defn infixcal [left op right & expr]
  (let [r (op left right)]
    (if (nil? expr)
      r
    (infixcal r expr))))

当我传递表达式38 + 48 - 2 / 2时,我得到ArityException,因为expr收集在列表'(- 2 / 2)中。

问题是如何将其分解为多个参数并将其传递给函数infixcal的下一个调用。

1 个答案:

答案 0 :(得分:1)

我相信您希望函数适用:http://clojuredocs.org/clojure_core/clojure.core/apply

此函数将另一个函数f作为其第一个参数,将列表l作为其第二个参数。然后将函数f应用于参数列表(并且从apply返回返回值)。