Clojure - 对列表列表中的每个项目进行操作

los*_*ote 4 functional-programming list clojure return-value

我正在Clojure开展我的第一个功能程序.我有一些问题想弄清楚如何遍历列表中的每个项目,列表中的每个列表,并在保持返回值的同时对其进行操作.我确信这个问题来自于我对Clojure和函数式编程的不熟悉,并希望有人可以解释执行以下操作的最佳方法:

psuedo-code algorithm:
for each lst in list
   for each item in lst
      return_values.append = do_something(item)
Run Code Online (Sandbox Code Playgroud)

我首先尝试嵌套两个doseq函数,然后调用我的do_something函数,该函数调用项目上的函数,但没有保存我的返回值.然后我尝试了for,并cons以空单,但无法获得的超出了我的返回值for.

是否有可能/首选打破列表列表?我还能得到一份返回值列表吗?

最后,我希望结果是一个返回值列表列表,以匹配列表的输入列表.如果有人能解释在Clojure中做到这一点的最佳方法,以及为什么,我将非常感激.

Leo*_*tny 5

嵌套for循环可以解决这个问题:

(for [lst my-list]
  (for [item lst] (do_something item)))
Run Code Online (Sandbox Code Playgroud)

它将采用嵌套列表my-list(列表列表)并通过应用于do_something每个元素将其转换为另一个嵌套列表.

在clojure中,for已经返回一个值列表,因此不需要自己处理它.此外,由于clojure中的所有数据结构都是不可变的,因此您无法通过将元素附加到最初为空的列表来实现cons.

  • 也适用于:`(对于[row my-list,cell row](...))` (2认同)