如何对向量执行具有副作用的函数



第一人称打招呼效果很好,为什么不对每个人打招呼?

(定义部分问候 [姓名]  [:p.警报"你好"名字",你好吗?(定义说你好[姓名]  (附加$content(问候语名称)))(对第一人称打招呼[名字]  (打招呼(名字)))(对大家打招呼[姓名]  (地图说你好名字))(向第一人称打招呼["克里斯"汤姆"吉姆"洛基"])(向大家打招呼["克里斯"汤姆"吉姆"洛基"])

你想要doseq,Clojure的"foreach":

(doseq [name names]
  (say-hello name))

map不起作用,因为它会产生一个惰性序列:在您实际访问序列中的项目(您在此处没有)之前,不会评估它们中的任何一个,并且不会发生副作用。

另一种选择是通过将dorun包裹在map上来强制评估。思考为什么这可能有助于您的理解(尽管这里的惯用方法doseq)。

正如@edbond在他的评论中所说,map fn 直到必要的时刻才进行评估,因为 map fn 返回一个懒惰的 seq。

这是地图fn的文档 返回一个惰性序列,该序列由将 f 应用于 每个 coll 的第一项的集合,然后将 f 应用于集合 每个 Coll 中的第二个项目,直到任何一个 Coll 是 用尽。其他列中的任何剩余项都将被忽略。功能 f 应该接受列数参数。

如果需要确保在代码的一个特定部分中计算值,则可以使用 doall 或 dorun

最新更新