почти прямой эквивалент
(defn solve [i j]
(or ;; some other code
(solve (dec i) j)
(solve i (inc j))
;; some code
))
Обратите внимание на отсутствие оператора return
- все является выражением.
В вашем java-фрагменте «некоторый другой код» должен иметь возможность возвращать truey, в противном случае вы получите переполнение стека (вместо «бесконечной рекурсии»).
Причина, по которой код может быть настолько коротким, заключается в том, что макрос or
выполняет оценку коротких замыканий (т. Е. Останавливает оценку, как только может быть получен значимый результат).
В примере clojure «некоторый другой код» должен быть выражением, которое может принимать значение false или ноль.
Если вам нужно "немедленно вернуть false
" из "какого-то другого кода", ваше выражение должно быть немного более запутанным.