В общем, вы хотите использовать какую-то последовательность операций (например, ответ dnolen). Однако, если вам нужно сделать что-то, что не может быть выражено в некоторой комбинации функций последовательности, использование макроса loop
также работает. Для этой точной проблемы, ответ dnolen лучше, чем что-либо, использующее loop
, но для наглядности, вот как бы вы написали его с loop
.
(loop [i 0
max-mod 0]
(if (>= i 1000)
(println max-mod)
(recur (inc i)
(loop [j 0
max-mod max-mod]
(if (>= j 1000)
max-mod
(recur (inc j)
(if (and (= (mod (* i j) 13) 0)
(= (mod 1 7) 0))
(* i j)
max-mod)))))))
Это почти точный перевод вашего кода. Тем не менее, это, очевидно, некрасиво, поэтому решение, использующее for
(или другие подобные функции), всегда предпочтительнее.