我只是在考虑 common-lisp 中的不同映射函数,如 hyperspec 中所述。我非常习惯 mapcar 并认为它最容易理解。但是使用 mapc 的真实示例是什么?据我所知,hyperspec 中的示例将它用于副作用。但是为什么它返回列表参数?

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

最佳答案

使用 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 中的很多东西都是针对 "hysterical reasons" 的。

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

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

关于mapping - 使用mapc的现实例子是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52556571/

10-11 06:42