以下是Lispworks.com Hyperspec为mapcan提供的示例:
(mapcan #'(lambda (x) (and (numberp x) (list x)))
'(a 1 b c 3 4 d 5))
=> (1 3 4 5)
我不理解
的原因(list x)
和表单中的。没有它只返回T,但为什么呢?另外,为什么在lambda形式前面的#'?
答案 0 :(得分:1)
And
返回其最后一个表单,因此如果谓词返回true,则x
将附加到结果中。
#'
前面的lambda
使lambda形成一个函数。在现代的Common Lisp中你不需要它,因为lambda
宏扩展到同一个东西。
答案 1 :(得分:1)
MAPCAN功能和休息列表+ =>级联-结果
MAPCAN 期望参数function
返回一个列表。在示例中,参数function
在一个数字上调用LIST
,因此返回一个包含一个项目的列表,一个数字。 MAPCAN
将所有结果列表合并到一个列表中,然后。