Я пытаюсь написать служебную функцию Clojure с именем map-longest
(предложение альтернативного имени приветствуется). Эта функция будет иметь следующую «подпись»:
(map-longest fun missing-value-seq c1 & colls)
и будет вести себя аналогично map
, за исключением того, что он продолжит обработку предоставленных коллекций до тех пор, пока не будет исчерпан самый длинный . Для коллекций короче самой длинной, когда у них заканчиваются значения, они берут их из missing-values-seq
. Это должно быть лениво, но, очевидно, не может использоваться с бесконечными коллекциями.
Пример использования:
(print (apply str
(map-longest #(str %1 \space %2 \space %3 \newline) (repeatedly "--")
["a1" "a2" "a3"] ["b1" "b2"] ["c1" "c2" "c3" "c4"])))
Это должно произвести следующий вывод:
a1 b1 c1
a2 b2 c2
a3 -- c3
-- -- c4
но я могу ошибиться.
Как мне это реализовать? Есть ли в библиотеке clojure.core или clojure-contrib что-то подобное? В качестве альтернативы missing-value-seq
, было бы лучше передать вторую функцию для генерации пропущенных значений (например, #(identity "--")
в моем примере)?
Вариант использования: я пишу небольшой текстовый пасьянс «Паук» в качестве упражнения для изучения Clojure / функционального программирования. Мне нужно иметь возможность отображать игровые таблицы (таблицы для пуристов: -)).