質問は私が何をしたいのかを本当に説明していませんが、他に何も考えられませんでした.
コードの外側の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
、 mya
とb
vars はまだ空です。a と b のスコープは、doseq の内部から行われた変更を永続化するために 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