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

问题描述 投票:0回答:2

我只是在考虑

common-lisp
中的不同映射函数,如 hyperspec 中所述。我已经习惯了
mapcar
并且认为这是最容易理解的。但是使用
mapc
的真实例子是什么?据我所知,
hyperspec
中的示例使用它来产生副作用。但为什么它返回列表参数呢?

当这种映射优于使用

loop
等的迭代时,是否存在一般规则?

mapping common-lisp
2个回答
8
投票

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

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

更清晰

为什么它返回列表参数?

函数继承强加了这样的思想:每个函数都应该返回有用的东西;对于

mapc
,这是原始列表。

我认为

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

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

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

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

而且,CL中的很多事情都是出于“歇斯底里的原因”

当这种映射优于使用
loop
等的迭代时,是否存在一般规则?

仅当您已经有一个可以满足您需要的功能时,例如上面的

print


0
投票
例如,我使用

mapc

 来处理列表成员并将其保存到数据库和流中。然后我可以使用 
mapc
 返回的未更改列表来验证交易或测试。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.