2013-03-15 33 views
8

我刚开始使用Clojure的,我想知道为什么下面没有按预期工作:Clojure的 - 部分在' - >'宏

(-> 5 
    - 
    (partial + 5)) 

我希望这个表达式的结果是0(-5 + 5),但整个事情似乎是一个部分。

(macroexpand `(-> 5 - (partial + 5)) 
    #_=>) 
(clojure.core/partial (clojure.core/-> 5 clojure.core/-) clojure.core/+ 5) 

为什么这样,我该怎么做我想做的事?

+0

在这种情况下你可能不需要部分? '( - > 5 - (+ 5))' – hsestupin 2013-03-15 23:01:35

回答

10

需要一组额外的括号的:以前的表达式,如列表中的第二个参数的

user> (-> 5 - ((partial + 5)))                                    
0 

->宏会插入结果所以在你的榜样,将exand到(partial (- 5) + 5)与额外的(),它在部分功能后插入((partial + 5) (- 5))

+0

啊哈,这很有道理。谢谢。 – 2013-03-15 23:42:13