Если мы исправим ваш код в соответствии с тем, что @ ответ cfrick означает, что мы получим что-то вроде ...
(defn displayLogTable [start stop step]
(if (> start stop)
nil
(if (< start stop)
(Math/log10 start)
(displayLogTable (+ start step) stop step))))
Это не имеет особого смысла. Мы можем упростить это до ...
(defn displayLogTable [start stop step]
(loop [start start]
(cond
(> start stop) nil
(< start stop) (Math/log10 start)
:else (recur ( + start step)))))
Столь же бесполезно. Выглядит так, как будто вы хотите последовательность логарифмов диапазона чисел, определенных как start
, stop
и step
. Один из способов сделать это в Clojure - это ...
(defn displayLogTable [start stop step]
(map
(fn [x] (Math/log10 x))
(range start stop step)))
Например, ...
=> (displayLogTable 1 10 1)
(0.0 0.3010299956639812 0.47712125471966244 0.6020599913279624 0.6989700043360189
0.7781512503836436 0.8450980400142568 0.9030899869919435 0.9542425094393249)
Обратите внимание, что range
включает начальную точку (0
), но без учета конечной точки (10
).
Средства Clojure для работы с последовательностями (здесь встречаются map
и range
) часто являются ключом к решению подобных проблем.