【问题标题】:Clojure Loop Function Only Returns NilClojure 循环函数仅返回 Nil
【发布时间】:2020-05-06 14:42:17
【问题描述】:

下面的函数将 text 变量拆分成一个 steps 长的字符序列。唯一的问题是我不知道如何返回结果列表,我需要为 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)))))))

【问题讨论】:

  • 正如下面的答案所说,您应该在错误条件分支中返回结果。您也可以这样做,以降低代码复杂性:(defn split-text [text step] (map (partial apply str) (partition step text)))

标签: clojure


【解决方案1】:

你需要从循环中返回结果:

(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)))))))

【讨论】:

  • 谢谢!这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2021-05-23
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多