Mam dyr np formularza:Ponowne użycie wartości w warunkach iw konsekwencji dla efektywności w lisp/Clojure
(cond
(condition1) (consequent1)
(condition2) (consequent2))
mówią w warunek2 chcę obliczyć pewną wartość, która jest drogie, więc wolałbym Zrób to tylko raz. Jeśli warunek2 jest prawdziwy, chciałbym użyć tej kosztownej wartości w consequent2. Moim dylematem jest więc to, że nie chcę przeliczać wartości warunku i konsekwencji, ponieważ jest to marnotrawstwem. Ja też nie chcę rzucić całego skoku wewnątrz większej funkcji let, np.
(let [value-used-in-cond2 do-expensive-computation]
(cond
(condition1) (consequent1)
(condition2) (consequent2)))
ponieważ nie chcę, aby obliczyć tę wartość, jeśli nie mogę dostać się do stanu 2, to znaczy jeśli condition1 jest prawdą.
Czy istnieje idiomatyczny sposób radzenia sobie z tym? Pierwszą rzeczą, która przychodzi na myśl, jest zapamiętanie kosztownej funkcji, ale musi istnieć prostsze rozwiązanie.
Weź spójrz na 'condp' i jego użycie': >> '. –
To może być również modelowane przy użyciu leniwej semantyki oceny – Ankur