首页 > 解决方案 > 在 Clojure 中使用递归构建字符串

问题描述

我需要生成一个随机字符并构建一个字符串,并且仅在我的字符串包含新生成的字符时才停止。


(defn rand-char [len]
  (apply str (take len (repeatedly #(char (+ (rand 26) 65))))))

(def random-string
  (loop [x (rand-char 1)
         result []]
    (if (some #(= x %) result)
      (apply str (conj result x))
      (recur (conj result x) (x (rand-char 1))))))

我正进入(状态

java.lang.String cannot be cast to clojure.lang.IFn

标签: loopsrecursionclojure

解决方案


rand-char返回 astring但在(x (rand-char 1))您尝试x作为函数调用时,因此出现错误。您只需要调用rand-char生成下一个随机字符串即可尝试。参数recur的顺序应该与声明的顺序相同,loop所以你的顺序错误:

(recur (rand-char 1) (conj result x))

推荐阅读