2011-01-30 2 views
2

Я пытаюсь выполнить итерацию по последовательности, условно выполнить операцию над каждым элементом и затем собрать ее (но только если она соответствует критериям). Вот упрощенный пример, который работает, я просто хочу знать, если это является правильным или наилучшей практики в сюсюкать:Условные анафорические коллекции лучших практик?

(loop for n in '(1 2 3 4 5) 
      when (when (equal (mod n 2) 0) n) 
      collect it) 

дает

(2 4) 

Это работает, это выглядит просто смешно мне и не так большая часть того, когда-когда, но потому, что я чувствую, что мне нужно установить условие, чтобы вернуть то, что я хочу. Я получаю, что anaphoric это работает на оценке того, когда это только кажется немного искусственным для меня. Я что-то упускаю? Я всего лишь несколько недель пробовал.

Редактировать: На самом деле, я несколько смущен, когда пытался применить это. Что я действительно хочу сделать, так это:

(loop for n in '(1 2 3 4 5) 
     when (when (equal (mod n 2) 0) n) 
     collect it 
     do (format t "~A" it)) 

но второй, кажется, становится несвязанным ... как это сделать?

+0

Для сравнения чисел вы можете использовать = или EQL. –

ответ

4

Я не понимаю, зачем вам здесь анафора.

(loop for n in '(1 2 3 4 5) 
     when (evenp n) 
     collect n and 
     do (format t "~A" n)) 

Удалить ключевое слово И если вы хотите, чтобы FORMAT безоговорочно.

+0

Спасибо, И был тем, чего мне не хватало. –

Смежные вопросы