0

假设我有一个宏,在宏里面我有这个:

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

因为我很难找到关于非常简单的 Clojure 东西的正确信息,所以我在这里问:我需要做什么才能完成上述任务?我认为应该可以做到这一点,但我不知道最关键的部分!

4

1 回答 1

2

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

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

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

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

于 2013-01-20T14:29:42.447 回答