首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Clojure中传感器内的Pmap

在Clojure中传感器内的Pmap
EN

Stack Overflow用户
提问于 2017-09-06 15:58:57
回答 2查看 413关注 0票数 3

我想在换能器中使用pmap,如果我用常规映射编写代码,它可以正常工作。然而,如果我使用pmap,我就会得到一个异常。是否有可能在clojure中实现这一目标,或者我是否做错了什么?如果这是不可能的,有人能指出为什么会这样吗?只是出于好奇。下面粘贴的是我的代码和异常的开始。

代码语言:javascript
运行
复制
(def get-in-map (comp
              (pmap read-csv)
              ))
clojure.lang.Compiler$CompilerException: clojure.lang.ArityException: Wrong number of args (1) passed to: core/pmap, compiling:
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-06 16:23:55

pmap不支持用它创建换能器。如果你想一想,这是有道理的。从pmap到map的并行化破坏了换能器的保证。它使并行上下文与对流程的描述复杂化。如前所述,这里转换器将消耗的上下文从描述要完成的任务的代码中分离出来。

换能器的并行上下文的核心实现尚未实现:看这张票。但是,您可以使用core.异步/管道或core.Reducers/折叠来自己创建一个管道。

票数 5
EN

Stack Overflow用户

发布于 2017-09-06 16:13:05

map被记录为“在不提供集合时返回转换器”(文档),而pmap (文档)则不是这样。

您可以看到map 这里的单参数版本的实现。正如您所看到的这里pmap没有一元版本,所以这就是您获得ArityException的原因。

这就引出了一个问题:为什么没有一元pmap?因为换能器可以以更一般的方式提供这种并行性。当您使用转换器时,不需要在每个操作中实现并行性( map的并行版本等等)。看看clojure.core.reducers/fold:它“使用一种(潜在的并行)减少合并策略减少了一次校对。”示例(来自David Nolen):

代码语言:javascript
运行
复制
(clojure.core.reducers/fold + 
                            ((map inc) +) 
                            (vec (range 1000000)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46079712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档