clojure:如何从两个序列构建字符串?

clojure:如何从两个序列构建字符串?,clojure,lazy-sequences,Clojure,Lazy Sequences,我为一个问题挣扎了好几个小时。。。我想用两个序列中的值建立一个链接 (doseq [item photoset-name] (prn item )) (doseq [item-name photoset-id] (prn item-name )) 输出: "AlbumTitel2" "test" "AlbumTitel" "album123" "speciale" "neues B5 Album" "Album Nr 2" "72157632764328569" "72157632769231

我为一个问题挣扎了好几个小时。。。我想用两个序列中的值建立一个链接

(doseq [item photoset-name] (prn item ))
(doseq [item-name photoset-id] (prn item-name ))
输出:

"AlbumTitel2"
"test"
"AlbumTitel"
"album123"
"speciale"
"neues B5 Album"
"Album Nr 2"
"72157632764328569"
"72157632769231530"
"72157632769092584"
"72157632768156156"
"72157632762740183"
"72157632724688181"
"72157632760876608"
现在我想建立这样一个链接(针对每个id/名称):


它应该是一个序列或地图。。。任何我可以重复的东西

有人知道如何将其归档吗


谢谢

您可以尝试使用以下两种方式之一的地图(我目前手头没有Clojure,因此无法验证):


将多个列表中的项目组合成单个列表中的成对项目通常称为“压缩”。我在

(map#(str“”)photoset id photoset name)中找到的
(map vector…

如果不使用结果,为什么要运行它?这就是懒惰的全部意义,不是吗?@lgrapenthin你是对的;但是,如果您不知道
map
在Clojure中是懒惰的,并且您尝试在其中执行某种IO操作,将其用作一般循环构造,而不使用结果,那么当什么都没有发生时,您可能会感到惊讶。我只是觉得我应该提一下,以防OP不知道。@lgrapenthin:那不是真的
map
始终执行所有中间分配,而
doseq
不执行。仅出于这个原因,人们就会期望它会更快。还有一个事实是,
dorun
不是chunked-seq-aware,而
doseq
doseq
在扩展中内联主体,而
map
以更高的顺序使用传入函数;等等。在使用Criterium的简单微基准中,只有一个输入集合,除了执行一系列副作用表达式之外,没有对项目进行处理,
doseq
以相当大的优势获胜。微基准示例:(604µs
doseq
与987µs
dorun map
在每一步对一个框进行变异时迭代)当然,我只是不同意这样的说法,即在两者都适用的情况下,
dorun map
应该优先于
doseq
。这里的
doseq
似乎一开始就不适用,因为问题要求返回一个sekable。更好的微基准(结果:624µs与977µs):我希望这些不是用户提供的相册-如果是,请确保您可以转义!您是什么意思?如果他使用edn阅读这些相册,应该转义,对吗?我指的是html转义以避免XSS。如果用户提供了标题为
X
的相册怎么办?您是如何做到的?我不太处理生成Web链接的问题。这个问题是我nto it:
<a href="http://example.com?id=72157632764328569">AlbumTitel2</a>
(map #(prn "<a href=\"" %1 "\">" %2 "</a>") item item-name)
(doseq [pair (map vector item item-name)]
  (prn "<a href=\"" (first pair) "\">" (second pair) "</a>"))
(doseq [[url title] (map vector item item-name)]
  (prn "<a href=\"" url "\">" title "</a>"))
(map #(str "<a href=\"http://example.com?id="
           %1
           "\">"
           %2
           "</a>") photoset-ids photoset-names)