Цикл Clojure и счет

Я пытаюсь получить ссылку для каждого фотосета. Это должно выглядеть так:

[:p (ссылка на (str "/album?photosetid="photosetid) имя-фотосета)

В следующем коде я получаю карту всех идентификаторов и имен фотосетов:

(def ids (map #(str "/album?photosetid=" %1) photoset-id))
(def names (map #(str  %1) photoset-name))

После этого я пытаюсь создать ссылки:

  (loop [x (count ids)]
    (when (> x 0)
      [:p (link-to (nth ids x "") name) (nth names x "")]
      (recur (- x 1))
      )
    )

Проблема в том, что я не получаю никакого вывода.

Спасибо за любую помощь!


person wes    schedule 16.08.2013    source источник
comment
Просто к вашему сведению, причина, по которой это возвращает nil, заключается в том, что в отличие от map или reduce или for, здесь нет неявного сбора результатов с помощью цикла. В то время как map, как показывает lgrapenthin, является более кратким и идиоматичным, вы получили бы правильный результат, если бы использовали аргумент коллектора для цикла, добавляя каждый элемент к результату на каждом шаге, и если вместо когда, возвращая коллектор, если x = -1.   -  person noisesmith    schedule 16.08.2013
comment
также #(str %1) можно заменить на str   -  person noisesmith    schedule 16.08.2013
comment
@noisesmith Это почти верно, но Иккинг различает векторы и последовательности, и ему нужна последовательность в качестве вывода. Так что ему придется обернуть его как (seq (loop ...)).   -  person amalloy    schedule 18.08.2013


Ответы (1)


person    schedule
comment
Выглядит хорошо! Единственная проблема - это идентификатор. Мне нужен идентификатор фотосета из идентификаторов. Я использую его для получения фотографий для каждого фотосета. - person wes; 16.08.2013
comment
Разница между этим и подразумеваемым поведением исходного примера заключается в том, что оригинал будет продолжать создавать пустые строки для имен, если имена короче идентификаторов. - person noisesmith; 16.08.2013
comment
Я не знаю, что делает link-to, но я полагаю, что он должен получить действительное имя для каждого идентификатора. Также я ожидаю, что пары id/name будут поступать из одного и того же источника (хэш-карта или коллекция). Я думаю, что если вам нужны здесь пустые строки, было бы более идиоматично сначала убедиться, что они находятся в именах. - person Leon Grapenthin; 16.08.2013