我有一个条件,例如:
(cond
(condition1) (consequent1)
(condition2) (consequent2))
在条件 2 中说我想计算一些昂贵的值,所以我宁愿只做一次。如果 condition2 为真,那么我想在 consequent2 中使用这个昂贵的值。我的困境是我不想重新计算条件和结果中的值,因为这很浪费。我也不想将整个 cond 放入更大的 let 函数中,例如
(let [value-used-in-cond2 do-expensive-computation]
(cond
(condition1) (consequent1)
(condition2) (consequent2)))
因为如果我从未达到条件 2,即如果条件 1 为真,我不想计算这个值。
有没有一种惯用的方法来处理这个问题?首先想到的是记忆昂贵的功能,但必须有更简单的解决方案。