Условный анафорический сборник лучших практик?
Я пытаюсь перебрать последовательность, условно выполнить операцию над каждым элементом и затем собрать его (но только если он соответствует критериям). Вот упрощенный пример, который работает, я просто хочу знать, является ли это правильным или наилучшей практикой в lisp:
(loop for n in '(1 2 3 4 5)
when (when (equal (mod n 2) 0) n )
collect it)
доходность
(2 4)
Это работает, это просто смешно для меня, и не столько когда-то, сколько потому, что я чувствую, что мне нужно подстроить условие, чтобы вернуть то, что я хочу. Я понимаю, что это анафорическая система, которая работает над оценкой того, когда, но это просто кажется мне немного искусственным. Я что-то пропустил? Я был шучу всего несколько недель.
Изменить: На самом деле, я несколько растерялся, когда я пытался применить это. Что я действительно хочу сделать, это:
(loop for n in '(1 2 3 4 5)
when (when (equal (mod n 2) 0) n)
collect it
do (format t "~A" it))
но во-вторых, кажется, что он не связан... как мне это сделать?
1 ответ
Я не понимаю, зачем вам нужен анафор здесь.
(loop for n in '(1 2 3 4 5)
when (evenp n)
collect n and
do (format t "~A" n))
Удалите ключевое слово И, если вы хотите ФОРМАТ безоговорочно.