- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下结构的数据(简化):
(def m {"a" [1 2 3] "b" [4 5 6] "c" [7 8 9] "d" [10 11 12]})
我有一个递归函数,在任何迭代中我都对每个 a
、b
、c
的第 i 个元素感兴趣和 d
。
我一直在做的是:
(loop [i 0]
(let [a ((m "a") i)
b ((m "b") i)
c ((m "c") i)
d ((m "d") i)]
...do stuff with a, b, c and d...
换句话说,我正在为 a
、b
、c
和 d
创建绑定(bind),这是因为每次我需要此值时,我都不想在我的代码中多次重复类似 ((m "a") i)
的内容。
这看起来有点笨拙,而且不是一种非常实用的风格。有没有更好的方法来实现这一目标?也就是说,是创建绑定(bind)的更优雅的方式还是避免绑定(bind)的方式?
编辑:添加关于为什么我需要循环而不是映射的解释:
我的数据代表一棵树,我的函数遍历树以找到合适的终端节点。每个向量的 i'th
元素是与 i'th
节点相关的数据。因此,我从 i = 0
开始,因为这是根节点。我做了一些逻辑,这告诉我下一步要去哪个节点。每个节点的逻辑都相同,这就是我使用 loop
和 recur
的原因。实际上可能有 200 个节点,因此通过树的一条路径可能是 0 > 6 > 45 > 67 > 123 > 130 > 156 > done
。
如果有一种方法可以使用 map
而不是 loop
来遍历树,我会印象深刻。
最佳答案
根据您要解决的更大问题,这可能会有所帮助:
user> (def m {"a" [1 2 3] "b" [4 5 6] "c" [7 8 9] "d" [10 11 12]})
#'user/m
user> (defn each-element [a b c d] (vector a b c d))
#'user/each-element
user> (apply map each-element (map m ["a" "b" "c" "d"]))
([1 4 7 10] [2 5 8 11] [3 6 9 12])
您可以将 each-element
的定义替换为您的函数,该函数分别操作“a”、“b”、“c”和“d”中的一个元素。
关于clojure - 这是可怜的clojure吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919367/
在 C# 中,我想制作“智能”枚举,这在 Java 中是可能的,其中有更多信息附加到枚举值,而不仅仅是底层 int。我偶然发现了一个创建类(而不是枚举)的方案,如以下简单示例所示: public se
我是一名优秀的程序员,十分优秀!