algorithm - 有人可以向我解释以下示例吗?

标签 algorithm clojure functional-programming lisp

嗯,我是 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))

mapcatfor 混合在同一个地方会让人更难看出所发生的一切都是嵌套序列理解。

关于algorithm - 有人可以向我解释以下示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261369/

相关文章:

mysql - 在 MySQL 中处理大量数据 - 一次选择多少行?

recursion - 递归使用 `lazy-seq`是否会占用堆栈帧?

Clojure - 处理内存不足的大文件

java - 无法登录到 clojure 中的 fluentd

Java 8,静态方法与函数

algorithm - 随机算法的属性(蒙特卡罗,拉斯维加斯)

algorithm - 不使用图形可能有任何有效的解决方案吗?

python - 创建一个包含上限所有子集的列表(但其中 lst[i] ≤ 上限[i])

functional-programming - 比较 Racket 中的日期

Haskell 模式匹配 - 它是什么?