从一个循环

问题描述:

返回的值有反正我可以从一个循环返回一个值,因为递归必须是在尾部从一个循环

(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递归只能发生在尾部

+0

可能重复(http://*.com/questions/14227972/returning- a值从 - 一个环) – sloth

我猜你的意思是这样的:

(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)