Я учу себя Clojure.
На языке, не являющемся FP, я мог бы достаточно легко написать вложенный if, и, если бы я специально не вставил else, тогда управление просто вышло бы из блока if. Например:
Thing myfunc()
{
if(cond1)
{
if(cond2)
return something;
}
return somethingelse;
}
Однако в Clojure нет оператора возврата (о котором я знаю), поэтому, если я напишу:
(defn myfunc []
(if (cond1)
(if (cond2) something))
somethingelse)
тогда нет «возврата» на «что-то». Кажется, что-то вроде, хорошо, здесь у нас есть значение, теперь давайте продолжим выполнение. Очевидное решение состоит в том, чтобы объединить условия, т.е.
(if (and (cond1) (cond2))
something
somethingelse)
но это становится громоздким / безобразным для больших условий. Кроме того, потребовалось бы дополнительное умозаключение, чтобы добавить оператор в «else» часть cond1. Есть ли какое-нибудь элегантное решение для этого?