gpt4 book ai didi

clojure - 为什么我的字符串函数返回 clojure.lang.LazySeq@xxxxxx?

转载 作者:行者123 更新时间:2023-12-03 21:23:01 26 4
gpt4 key购买 nike

我已经使用 leiningen REPL 定义了以下 3 个函数:
(defn rand-int-range [floor ceiling] (+ floor (rand-int (- ceiling floor))))

(defn mutate-index
"mutates one index in an array of char and returns the new mutated array"
[source idx]
(map
#(if (= %1 idx)
(char (+ (int %2) (rand-int-range -3 3)))
%2)
(iterate inc 0)
source))

(defn mutate-string
[source]
(str
(mutate-index
(.toCharArray source)
(rand-int (alength (.toCharArray source))))))

当我跑 (mutate-string "hello") ,而不是 REPL 打印出变异的字符串,而是打印出 clojure.lang.LazySeq@xxxxxx,其中 'xxxxx' 是数字和字母的随机序列。我希望它改为打印“helm”之类的东西,这真的像我想的那样给了我一个字符串吗?如果是,我怎样才能让 REPL 向我显示该字符串?

最佳答案

1) 要将字符序列(mutate-index 返回的内容)转换为字符串,请使用 apply str而不仅仅是 str .后者对对象而不是序列进行操作。

(str [\a \b \c])
=> "[\\a \\b \\c]"

(apply str [\a \b \c])
=> "abc"

2) 字符串是可序列化的,这意味着您可以使用序列函数,如 mapfilter直接在他们身上,没有像 .toCharArray 这样的东西.

3) 考虑使用 map-indexedStringBuilder完成你想要做的事情:
(apply str (map-indexed (fn [i c] (if (= 3 i) \X c)) "foobar"))
=> "fooXar"

(str (doto (StringBuilder. "foobar") (.setCharAt 3 \X)))
=> "fooXar"

关于clojure - 为什么我的字符串函数返回 clojure.lang.LazySeq@xxxxxx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com