gpt4 book ai didi

clojure - Clojure 序列推导式中是否存在变量?

转载 作者:行者123 更新时间:2023-12-04 23:05:48 25 4
gpt4 key购买 nike

我正在阅读 Programming Clojure 2nd edition,在第 49 页它涵盖了 Clojure 的 for 循环结构,它说它实际上是一个序列理解。

作者建议使用以下代码:

(defn indexed [coll] (map-indexed vector coll))

(defn index-filter [pred col]
(when pred
(for [[idx elt] (indexed col) :when (pred elt)] idx)))

(index-filter #{\a} "aba")
(0 2)

……比基于 Java 的命令式示例更可取,并且给出的证据是它“通过使用高阶函数……任何函数索引都避免了对变量的所有需求。”

如果“idx”、“elt”不是变量,它们是什么?它们是指除累加器之外的变量吗?

另外,为什么 #{\a} 而不是“a”?

最佳答案

pred是一个函数 - #{\a}是包含字符 a 的集合。在 Clojure 中,集合是一个函数,如果它的参数 \a 返回真。被它包含。您也可以使用 #(= % \a)(fn [x] (= \a x)) .

正如另一个答案所暗示的那样,“在制作此示例时未创建任何状态。” idxelt函数类似于变量,但仅对 for 是局部的序列理解,所以代码更紧凑,没有状态,而且可以说更清晰(一旦你习惯了序列理解,至少 :-) )——也许文本在这一点上不是很清楚。

关于clojure - Clojure 序列推导式中是否存在变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605210/

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