loops - 在 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
解决方案
rand-char
返回 astring
但在(x (rand-char 1))
您尝试x
作为函数调用时,因此出现错误。您只需要调用rand-char
生成下一个随机字符串即可尝试。参数recur
的顺序应该与声明的顺序相同,loop
所以你的顺序错误:
(recur (rand-char 1) (conj result x))
推荐阅读
- django - 在 Django 中,保存会话信息的正确方法是什么?
- java - Apache HttpClient Connection Management
- azure - 如何使用 powershell 脚本从 TFS 构建运行 webtests
- matlab - 试图解决一个简单的矩阵乘法运算但得到一个错误
- jquery - How can I make checkbox data add 25%of the total in my calculation script?
- sql - Grouping over the subquery in SQL on unique id
- java - Maven Compiler Error After Upgrading to JDK11 on Jenkins(Threading Issue?)
- python - 如何从文本中删除陌生单词
- c# - System.NullReferenceException Error C# ASP.NET
- regex - prerender.io via prerender-node middleware, blacklist hashbang