Я начал изучать Clojure два дня назад, без какого-либо опыта функционального программирования. Сегодня, читая чтение книги Программирование Clojure , я столкнулся с проблемой.
Речь идет о последовательности преобразования . Вот пример:
(map #(format "<%s>%s</%s>" %1 %2 %1)
["h1" "h2" "h3" "h1"] ["the" "quick" "brown" "fox"])
, который дает результат:
-> ("<h1>the</h1>" "<h2>quick</h2>" "<h3>brown</h3>" "<h1>fox</h1>")
Мне не так сложно это получить. На самом деле, проблема возникает, когда книга говорит мне, что мы можем использовать for
для общего понимания последовательности, а затем показывает мне пример. Этот пример довольно прост, и я могу его полностью понять.
Когда я пытаюсь переписать пример, который я впервые упомянул с помощью for
, проблема поражает меня.
Я мог бы просто получить:
("<h1>the</h1>"
"<h1>quick</h1>"
"<h1>brown</h1>"
"<h1>fox</h1>"
"<h2>the</h2>"
"<h2>quick</h2>"
"<h2>brown</h2>"
"<h2>fox</h2>"
"<h3>the</h3>"
"<h3>quick</h3>"
"<h3>brown</h3>"
"<h3>fox</h3>"
"<h1>the</h1>"
"<h1>quick</h1>"
"<h1>brown</h1>"
"<h1>fox</h1>")
с переписанным кодом:
(for [label ["h1" "h2" "h3" "h1"] word ["the" "quick" "brown" "fox"]]
(format "<%s>%s</%s>" label word label))
Мне сообщили, что, как правило, использование условия :when
может как-то помочь, но я просто не могу придумать.
Как можно переписать код с for
, чтобы ответ был точно таким же, как и у версии map
?