Clojure L oop Функция возвращает только Nil - PullRequest
0 голосов
/ 06 мая 2020

Функция ниже разбивает переменную текст на последовательность символов длиной шагов . Единственная проблема в том, что я не могу понять, как вернуть результирующий список, который мне нужен для вычисления его энтропии Шеннона для нескольких значений step .

(defn split-text [text step]

  (loop [i 0 result []]
    (when (<= (+ i step) (count text))
      (recur (+ i step)
             (conj result (subs text i (+ i step)))))))

1 Ответ

1 голос
/ 06 мая 2020

Вам необходимо вернуть результат l oop:

(defn split-text [text step]
  (loop [i 0 result []]
    (if (> (+ i step) (count text))
      result  ;; <== here
      (recur (+ i step)
             (conj result (subs text i (+ i step)))))))

Кроме того, последний фрагмент будет потерян, если его длина меньше step символов. Если хотите сохранить:

(defn split-text [text step]
  (loop [tail text result []]
    (if (empty? tail)
      result
      (let [len (min step (count tail))]
        (recur (subs tail len)
               (conj result (subs tail 0 len)))))))
...