嗯,我是 clojure 的新手,我在 ( http://clojuredocs.org/clojure.core/mapcat) 中查看函数 mapcat 的文献,我发现了以下示例:
(mapcat (fn [[k v]]
(for [[k2 v2] v]
(concat [k k2] v2)))
'{:a {:x (1 2) :y (3 4)}
:b {:x (1 2) :z (5 6)}})
((:a :x 1 2) (:a :y 3 4) (:b :x 1 2) (:b :z 5 6))
我试图理解,但我很困惑键和值是如何工作的,我不确定当函数 for 和 concat 使用它们时,k、k2、v 和 v2 的确切值是什么。
感谢您的帮助。
最佳答案
也许这个例子会帮助你理解 mapcat
做了什么,但它不是一个写得很好的代码的好例子:它是一个相当困惑的方式来编写更简单的代码
(for [[k v] '{:a {:x (1 2) :y (3 4)}
:b {:x (1 2) :z (5 6)}}
[k2 v2] v]
(list* k k2 v2))
将 mapcat
和 for
混合在同一个地方会让人更难看出所发生的一切都是嵌套序列理解。
关于algorithm - 有人可以向我解释以下示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261369/