0

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

Java中的代码

private int add() { 

int i = 0;

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

}

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

4

2 回答 2

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以任何方式进行修改,只是引入了一个新的命名本地绑定到一个新值。

于 2013-01-13T03:35:24.143 回答
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)))))
于 2013-01-13T04:30:58.453 回答