我正在阅读 Programming Clojure 第 2 版,在第 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”?