gpt4 book ai didi

clojure - 在 REPL 中实现 Clojure 惰性序列(字符串)

转载 作者:行者123 更新时间:2023-12-02 00:57:07 24 4
gpt4 key购买 nike

我试图在 REPL 中实现惰性序列(应该生成单个字符串),但没有成功。原始代码工作正常:

(def word_list ["alpha" "beta" "gamma" "beta" "alpha" "alpha" "beta" "beta" "beta"])
(def word_string (reduce str (interpose " " word_list)));
word_string ; "alpha beta gamma beta alpha alpha beta beta beta"

但不想留下足够好,我想知道还有什么可以工作,并尝试删除 reduce,认为 str 可能具有相同的效果。它没有...

(def word_string (str (interpose " " word_list)))
word_string ; "clojure.lang.LazySeq@304a9790"

我尝试了显而易见的方法,再次使用 reduce,但这也不起作用。有 another question关于实现看起来很有希望的惰性序列,但我没有尝试过:

(reduce str word_string)   ; "clojure.lang.LazySeq@304a9790"
(apply str word_string) ; "clojure.lang.LazySeq@304a9790"
(println word_string) ; "clojure.lang.LazySeq@304a9790"
(apply list word_string) ; [\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...]
(vec word_string) ; [\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...]
(apply list word_string) ; (\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...)
(take 100 word_string) ; (\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...)

“clojure.lang.LazySeq”中的某些变体为我提供了字符,这一事实也让我担心 - 我是否以某种方式丢失了实际的字符串值,而我的引用只有值“clojure.lang.LazySeq”?如果不是,我如何真正实现值(value)?

澄清一下:鉴于 word_string 被分配给惰性序列,我将如何实现它?像 (realize word_string) 这样的东西,比如说,如果它存在的话。

更新:根据接受的 Answer 和 str 的工作原理,事实证明我可以得到实际的序列值,而不仅仅是它的名字:

(reduce str "" word_string) ; "alpha beta gamma beta alpha alpha beta beta beta"

是的,这是糟糕的代码。 :) 我只是想了解发生了什么,为什么它会崩溃,以及实际值是否仍然存在

最佳答案

你想要的是:

(def word_string (apply str (interpose " " word_list)))

查看str的文档:

With no args, returns the empty string. With one arg x, returns
x.toString(). (str nil) returns the empty string. With more than
one arg, returns the concatenation of the str values of the args.

因此,您在序列上调用 .toString,它会生成该表示,而不是将 str 作为参数应用于序列的元素。

顺便说一句,做你想做的更惯用的方法是:

(clojure.string/join " " word_list)

此外,字符串不是惰性序列。 interpose 返回一个惰性序列,您正在调用 .toString

关于clojure - 在 REPL 中实现 Clojure 惰性序列(字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452611/

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