基本的Clojure语法

时间:2013-01-20 14:19:46

标签: for-loop clojure let

假设我有一个宏,在宏中我有这个:

let[
    elements# //stuff// 
    #newlist (for [e# elements#] (if (number? e#) (**add e# to #newlist**)))
]

由于我很难找到关于真正简单的Clojure内容的正确信息,我在这里问:我需要做些什么才能完成上述任务?我认为应该可以做到这一点,但我不知道最重要的部分!

1 个答案:

答案 0 :(得分:2)

看起来您正在尝试创建一个名为newlist的列表,其中包含elements的所有数字元素。如果是这样,您可以像这样使用filter函数:

(let
  [elements whatever
   newlist (filter number? elements)]
  do-stuff-with-newlist)

filter接受谓词函数和列表,并返回一个新列表,其中包含谓词返回true结果的那些项。

请注意,您最初添加到for循环内的列表的想法是行不通的,因为列表是不可变的,因此您无法就地添加它们。您可以在for循环中重新分配一个包含列表的变量(类似(set! my-list (cons e my-list)),但这不是惯用的Clojure代码。它也会反向创建列表。