使用mapc的实际示例是什么?

时间:2018-09-28 13:33:23

标签: mapping common-lisp

我只是在考虑hyperspec中所述的common-lisp中的不同映射功能。我已经习惯了mapcar,并认为它是最容易理解的。但是,使用mapc的真实示例是什么?就我所知,hyperspec中的示例将其用于副作用。但是为什么它返回list参数呢?

在使用loop等进行迭代时,这种映射是否有利于通用规则?

1 个答案:

答案 0 :(得分:8)

使用mapc的真实示例是什么?

(mapc #'print my-list)(dolist (x my-list) (print x))

更清晰

为什么返回列表参数?

功能继承强加了这样的思想,即每个功能都应该返回有用的东西。对于mapc,这是原始列​​表。

我认为mapc返回其list参数的原因与print相同-通过在代码中添加输出来简化调试。例如,假设您做类似的事情

(mapcar #'important-processing
        list-with-weird-elements)

您想在保留逻辑的同时查看列表中的内容:

(mapcar #'important-processing
        (mapc #'show-weird-object list-with-weird-elements))

此外,CL中的许多内容都与"hysterical reasons"有关。

当这样的映射比使用loop等进行迭代时有利吗?

仅当您已经具有满足您需要的功能时,例如上面的print