2013-03-11 56 views
1

我在做this锻炼。如何在Clojure中打破列表?

这里是我的解决方案:

(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

我相信你想要的功能应用:http://clojuredocs.org/clojure_core/clojure.core/apply

这个函数接受另一个函数f作为第一个参数和列表L作为其第二。函数f然后应用于参数列表(并且返回值是从apply返回的)。

+0

感谢哥们。直到今天仔细阅读文档之前,我没有提出申请。 – yehe 2013-03-11 11:57:31