从一个循环
问题描述:
返回的值有反正我可以从一个循环返回一个值,因为递归必须是在尾部从一个循环
(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必须的代码的最后一行这就给我一个错误。我已经看过类似的问题,并说把返回值的,如果循环,我试过的结束,但失败了,给了我一个异常thatthe递归只能发生在尾部
答
我猜你的意思是这样的:
(defn abc [y]
(loop [x 10
y nil]
(if (> x 2)
(if (= 2 3)
(do (println "test")
(recur (- x 2) nil))
(do (let [x (+ 1 x)
y 2]
(println y)
(recur (- x 2) y))))
y)))
更新。没有不必要的部分将是
(defn abc [y]
(loop [x 10]
(if (> x 2)
(do (println 2)
(recur (- x 1)))
2)))
这是相同的[从一个循环返回的值]的
(defn abc [_]
(dotimes [_ 8] (println 2))
2)
可能重复(http://stackoverflow.com/questions/14227972/returning- a值从 - 一个环) – sloth