たとえば、次のような形式の条件があります。
(cond
(condition1) (consequent1)
(condition2) (consequent2))
condition2 で、高価な値を計算したいので、一度だけ実行したいと思います。condition2 が true の場合、consequent2 でこの高価な値を使用したいと思います。私のジレンマは、条件と結果の値を再計算したくないということです。これは無駄だからです。また、より大きな let 関数内に cond 全体をスローしたくありません。
(let [value-used-in-cond2 do-expensive-computation]
(cond
(condition1) (consequent1)
(condition2) (consequent2)))
条件 2 に到達しない場合、つまり condition1 が true の場合は、この値を計算したくないためです。
これに対処する慣用的な方法はありますか?最初に頭に浮かぶのは、高価な関数をメモすることですが、もっと簡単な解決策があるはずです。