无论如何我可以从循环中返回一个值,因为递归必须在尾部
(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 循环的末尾,这给了我一个例外,即递归只能在尾部发生