gpt4 book ai didi

Clojure-New Cond 宏?

转载 作者:行者123 更新时间:2023-12-03 14:42:27 25 4
gpt4 key购买 nike

我不明白 clojure 1.5 release notes 中的这段代码.它使用 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->不引入新功能,而是生成更高效的绑定(bind)表单:
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

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

关于Clojure-New Cond 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com