Clojure计算惰性序列
嗨,我需要从Clojure计算惰性序列,clojure,lazy-sequences,Clojure,Lazy Sequences,嗨,我需要从stringify函数返回字符串,但目前我得到了lazy seq。我不知道如何评估懒惰的seq 所以我需要的是像这样的链式呼叫: (println“格式化:”(fmt(stringify m))) concat在seqs上运行,而不是在字符串上运行。它处理字符串,但将其视为字符序列。它可以通过clojure.string/join实现为字符串 用(clojure.string/join”“res)替换stringify函数中的最后一条语句res,应该可以做到这一点。但是,您可以从一开
stringify
函数返回字符串,但目前我得到了lazy seq。我不知道如何评估懒惰的seq
所以我需要的是像这样的链式呼叫:
(println“格式化:”(fmt(stringify m)))
concat
在seq
s上运行,而不是在字符串上运行。它处理字符串,但将其视为字符序列。它可以通过clojure.string/join
实现为字符串
用
(clojure.string/join”“res)
替换stringify函数中的最后一条语句res
,应该可以做到这一点。但是,您可以从一开始就使用reduce kv
构建字符串,使用join
而不是concat
。您可以简化为任何内容,而不仅仅是集合/序列。处理字符串时,只需使用str
进行串联:
(concat acc s)) => (str acc s)
(concat acc ["+" s]) => (apply str [acc "+" s]) ; note moved `[`
示例:
=> (str "abc" "def")
"abcdef"
=> (apply str ["abc" "de" "fgh"] )
"abcdefgh"
=> (clojure.string/join ["abc" "de" "fgh"] ) ; like `(apply str...)`
我会考虑使用<代码> Culjule.String/String < /Cord>代替java互操作和<代码>。
=> (str "abc" "def")
"abcdef"
=> (apply str ["abc" "de" "fgh"] )
"abcdefgh"
=> (clojure.string/join ["abc" "de" "fgh"] ) ; like `(apply str...)`