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 に答える