这个问题并没有真正解释我想做什么,但我想不出其他任何东西。
我let
在一段代码的外部函数中有一个空映射,还有一个整数数组。我想遍历整数数组,执行一个简单的任务,并继续将结果映射附加到外部变量中的变量。
(let [a {} ;outer variables
b {}]
(doseq [x [1 2 3]]
(let [r (merge a {x (* x x)}) ;I want to append this to a
s (merge b {x (+ x x)})] ;and this to b
(println (str "--a--" r "--b--" s)))))
但是一旦我离开doseq
,我的a
和b
vars 仍然是空的。我知道 a 和 b 的范围没有扩展到doseq 之外,因为它可以保留从内部完成的任何更改,并且它们是不可变的。
请问在这种情况下如何计算 a 和 b 的值?我试图将doseq的功能提取到另一个函数中并调用let:
(let [a (do-that-function)])
等等,但即便如此,我还是想不出一种方法来跟踪doseq循环中的所有修改,然后作为一个整体发回。
我是否以错误的方式处理这个问题?
谢谢
编辑
真的,我想做的是:
(let [a (doseq [x [1 2 3]] {x (* x x)})]
(println a))
但是 doseq 返回 nil 所以 a 将是 nil :-s