2
は、私は、次のコードを持っている:テスト結果とcondの結果の両方でどのように結果を使用できますか?
(cond
(case-1? (compute-1 x)) (compute-1 x)
(case-2? (compute-2 x)) (compute-2 x)
(case-3? (compute-3 x)) (compute-3 x))
は私がcompute-1
、compute-2
、およびcompute-3
の繰り返し計算を避けたいです。 1つのオプションは次のとおりです。
(let [result-1 (compute-1 x)
result-2 (compute-2 x)
result-3 (compute-3 x)]
(cond
(case-1? result-1) result-1
(case-2? result-2) result-2
(case-3? result-3) result-3))
は今、私は計算を繰り返すことではないんだけど、今(case-1? result-1)
がtrueと評価代わり場合、result-2
とresult-3
は理由もなく計算しました。
(let [result-1 (compute-1 x)]
(if (case-1? result-1)
result-1
(let [result-2 (compute-2 x)]
(if (case-2? result-2)
result-2
(let [result-3 (compute-3 x)]
(if (case-3? result-3)
result-3))))))
しかし、このコードは明らかに急速に管理不能になってきている。
行動的には、私はこのような何かをしたいです。この問題の解決策はありますか?
マクロまたは外部depを必要としない場合は、計算を避けるために 'delay'を使用できます。 – ClojureMostly