如何在常见的lisp中使用谓词和mapcan

时间:2014-05-14 05:05:19

标签: common-lisp

以下是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形式前面的#'?

2 个答案:

答案 0 :(得分:1)

如果所有表单都为非null,则

And返回其最后一个表单,因此如果谓词返回true,则x将附加到结果中。

#'前面的lambda使lambda形成一个函数。在现代的Common Lisp中你不需要它,因为lambda宏扩展到同一个东西。

答案 1 :(得分:1)

MAPCAN功能和休息列表+ =>级联-结果

MAPCAN 期望参数function返回一个列表。在示例中,参数function在一个数字上调用LIST,因此返回一个包含一个项目的列表,一个数字。 MAPCAN将所有结果列表合并到一个列表中,然后。