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

时间:2013-08-07 20:44:51

标签: 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"
"72157632769231530"
"72157632769092584"
"72157632768156156"
"72157632762740183"
"72157632724688181"
"72157632760876608"

现在我想构建一个这样的链接(对于每个id / name):

<a href="http://example.com?id=72157632764328569">AlbumTitel2</a>

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

有没有人知道如何存档?

谢谢!

2 个答案:

答案 0 :(得分:2)

(map #(str "<a href=\"http://example.com?id="
           %1
           "\">"
           %2
           "</a>") photoset-ids photoset-names)

答案 1 :(得分:1)

您可以尝试以两种方式之一使用地图(我目前没有Clojure方便,所以我无法验证):

(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>"))

编辑:小心使用map;它很懒,所以如果你不使用它返回的结果那么它实际上可能不会被运行!

这可能也有效:

(doseq [[url title] (map vector item item-name)]
  (prn "<a href=\"" url "\">" title "</a>"))

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

中找到的(map vector ...)