2016-04-23 14 views
1

ループマクロを使用してリストをフィルタリングしようとしています。私がしている場合一般的なlispループマクロでの収集によるフィルタリング

(loop for x in (list 1 2 3 4) collect x) 

私はちょうど同じリストを取得して意味があります。しかし、私は

(loop for x in (list 1 2 3 4) collect x if (evenp x)) 

ような何かをして(2 4)バックを取得したいと思い、それは法的ではありません。何らかの理由で、私はこれに関する適切な構文が他の文書では見つけられません。これは可能ですか?

+3

ですHyperSpecはかなり合理的なドキュメントです。 [** loop **](http://www.lispworks.com/documentation/HyperSpec/Body/m_loop.htm)のエントリには文法が含まれており、関連するプロダクションは 'conditional :: = {if | |とき| [else selectable-clause {and selectable-clause} *] []] [end] '。 ** if(evenp x)がx **を収集する場合(** else **を使用していない場合は**、**はもっと慣用的な場合は**)順序を変更するだけです。 –

答えて

6

正しい構文は、「私は他のマニュアルのこのための適切な構文を見つけることができません。」

(loop for x in (list ...) when (evenp x) collect x) 
+0

また、 '(forループ(リスト...)if(evenp x)がxを集める)'。 – Vatine

関連する問題