Во-первых, вы можете упростить C++ до одного блока, если ваш комментарий считается.
Итак, давайте упростим сначала на C++, не так ли?
if(some_condition_satisfied(g)) {
a = eval(g); // never returns zero, right?
// so we roll the next if block into this one
do_something();
}
В Clojure, я хотел бы попробовать
(if (some_condition_satisfied g)
(let [a (eval g)]
(do_something)))
Обратите внимание, я устанавливаю a
, но не используется. Это ты имел в виду? В противном случае, передать его в do_something
или изменить, если условие
(if (and (some_condition_satisfied g) (not= 0 (eval g)))
(do_something))
Это будет соответствовать код C++ для
if (some_condition_satisfied(g) && 0 != eval(g)){
do_something();
}
Кроме того, мой Clojure ржавый, но я уверен, что я проверил синтаксис.
я считаю, что. В комментарии говорится, что eval (g) никогда не возвращает ноль. Единственные случаи, когда второй, если бы этот блок был пропущен, - это если либо комментарий лежит (возможно, возможно, даже вероятен), либо some_condition_satisfied (g) терпит неудачу, а предыдущий блок if не присваивает a. Поэтому я почувствовал, что они могут присоединиться. – Ball