2011-01-30 14 views
2

シーケンスを反復しようとしたとき、各要素に対して条件付きで操作を実行してからそれを収集します(条件に一致する場合のみ)。ここで私はちょうどこれが適正であるか、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)) 

結合していないとなっているようです第二...私はこれをどのように行うか

:私が本当にやりたいことは、このですか?

+0

数値を比較するには、=またはEQLを使用します。 –

答えて

4

ここにアナウンスが必要な理由はわかりません。

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

FORMATを無条件に削除する場合は、キーワードANDを削除します。

+0

ありがとう、ANDは私が行方不明だったものでした。 –