Clojure新Cond宏?

Clojure新Cond宏?,clojure,Clojure,我不理解这个代码。它使用cond->宏。例如,如何将其转换为1.5之前的代码 user=> (cond-> 1 true inc false (* 42) (= 2 2) (* 3)) 6 如果测试为真,则每个步骤都会更改结果;如果测试为假,则不执行该步骤 您可以在1.4中通过线程化匿名函数来编写: user> (-> 1 (#(if true (inc %) %))

我不理解这个代码。它使用
cond->
宏。例如,如何将其转换为1.5之前的代码

user=> (cond-> 1
               true inc
               false (* 42)
               (= 2 2) (* 3))
6

如果测试为真,则每个步骤都会更改结果;如果测试为假,则不执行该步骤

您可以在1.4中通过线程化匿名函数来编写:

user> (-> 1 (#(if true (inc %) %)) 
            (#(if false (* % 42) %)) 
            (#(if (= 2 2) (* % 3) %)))
6
虽然
cond->
没有引入新的函数,但它会生成一个绑定表单以提高效率:

user> (let [g 1 
            g (if true (inc g) g) 
            g (if false (* g 42) g) 
            g (if (= 2 2) (* g 3) g)] 
      g)
6
并使用
gensym
表示
g
如果某些表单使用符号
g


cond->
非常相似,它只是将螺纹符号放置在不同的位置

user> (let [g 1 
            g (if true (inc g) g) 
            g (if false (* 42 g) g) 
            g (if (= 2 2) (* 3 g) g)] 
       g)
6

在本例中,它给出了相同的结果,因为
*
+
是可交换的

你在哪里找到的?我猜这会给出6=
(*3(inc1))
,它通过谓词计算为true的任何函数来执行第一个参数。我非常喜欢中间的示例。。。非常地这使它更清楚了。另外,我假设
cond->
宏也有类似的例程?对不起,我在编辑它的时候,你发表了评论,哪一个是中间的?