处理后从函数返回值

时间:2013-01-13 02:26:26

标签: clojure

如何在clojure中进行一些处理后从函数返回一个值。

Java中的代码

private int add() { 

int i = 0;

if (i == 0) i++; 
if (i == 1) i += 2;
else i += 3;

}

我想过使用let但是if语句太多了因此我不确定如何返回。

2 个答案:

答案 0 :(得分:0)

最简单的音译只是为i的每个新值命名新的本地语,如下所示:

(defn add []
  (let [i 0
        i' (if (= i 0) (inc i) i)
        i'' (if (= i' 1)
              (+ 2 i')
              (+ 3 i'))]
    i''))

所有这些本地人都可能被命名为i,而不是称他们为i',但我不想混淆不变性问题:我们不会修改i in无论如何,只需引入一个新的命名本地绑定到一个新值。

答案 1 :(得分:0)

您的代码模式是:

if-else-expr(init-value) -> value1
if-else-expr(value1) -> value2
if-else-expr(value2) -> value3
if-else-expr...

它可以在clojure中实现

(defn add []
  (-> init-value
      (#(if (expr1-1) (expr1-2) (expr1-3)))
      (#(if (expr2-1) (expr2-2) (expr2-3)))
      (#(if (expr3-1) (expr3-2) (expr3-3)))
      ...))

在你的情况下:

(defn add []
  (-> 0
      (#(if (= % 0) (+ % 1) %))
      (#(if (= % 1) (+ % 2) (+ % 3)))))