gpt4 book ai didi

clojure - 在 Clojure 中如何从函数早期返回?

转载 作者:行者123 更新时间:2023-12-02 13:21:59 27 4
gpt4 key购买 nike

Common Lisp 有return-from;当你想从函数中提前返回时,Clojure 中是否有任何类型的 return

最佳答案

当您需要尽早摆脱计算时,您需要一种方法来做到这一点,而不是来自纯粹主义者的争论。通常,当您减少一个大集合并且某个值表明没有必要进一步处理该集合时,您需要它。为此,实用的 Clojure 提供了 reduced功能。

举个简单的例子来说明,当一个数字序列相乘时,如果遇到零,你就已经知道最终结果将是零,所以你不需要查看序列的其余部分。以下是使用 reduced 进行编码的方法:

(defn product [nums]
(reduce #(if (zero? %2)
(reduced 0.0)
(* %1 %2))
1.0
nums))

reduced 将您赋予它的值包装在哨兵数据结构中,以便 reduce 知道停止从集合中读取并简单地返回 reduced 现在的值(value)。嘿,它甚至是纯功能的!

如果将上面的 if 封装在 do 中并使用 (println %1 %2),您可以看到发生了什么:

user=> (product [21.0 22.0 0.0 23.0 24.0 25.0 26.0])
1.0 21.0
21.0 22.0
462.0 0.0
0.0

user=> (product [21.0 22.0 23.0 24.0 25.0 26.0])
1.0 21.0
21.0 22.0
462.0 23.0
10626.0 24.0
255024.0 25.0
6375600.0 26.0
1.657656E8

关于clojure - 在 Clojure 中如何从函数早期返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491360/

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