2011-01-30 15 views
2

我試圖遍歷一個序列,有條件地對每個元素執行一個操作,然後收集它(但只有當它匹配條件時)。這裏是工作的一個簡單的例子,我只是想知道這是否是正確的或口齒不清最佳實踐:有條件的指代收集最佳實踐?

(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。 – 2011-01-30 19:13:21

回答

4

我不明白爲什麼你需要這裏的照應。

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

刪除關鍵字AND如果你想無條件地格式化。

+0

謝謝,AND是我錯過的。 – 2011-01-30 16:13:51