とにかく、再帰は末尾にある必要があるため、ループから値を返すことができますか
(ns for)
(defn abc [y]
(loop [x 10]
(when (> x 2)
(if (= 2 3) (do (println "test") (recur (- x 2)))
(do (let [x (+ 1 x)
y 2] (println y) (recur (- x 2))))))))
(abc 1)
とにかく、y をパラメーターとして取り、y の新しい値を更新することで、関数の値を返すことができます。ただし、繰り返し部分はコードの最後の行にある必要があるため、コードの最後の行として y を配置することはできません。
例
(ns for)
(defn abc [y]
(loop [x 10]
(when (> x 2)
(if (= 2 3) (do (println "test") (recur (- x 2)))
(do (let [x (+ 1 x)
y 2] (println y) (recur (- x 2)))))))
y)
(abc 1)
recur はコードの最後の行でなければならないため、これはエラーになります。同様の質問を見てきましたが、試行したが失敗した if ループの最後に戻り値を配置するように指示されているため、再帰は末尾でのみ発生するという例外が発生します