延迟连接可枚举的列表

2024-06-23

我想编写一个类似于 List.concat/1 的函数,它接受可枚举的列表并将连接的列表作为连续流发出。

它会像这样工作:

iex> 1..3 |> Stream.map(&([&1])) |> Enum.to_list
[[1], [2], [3]]
iex> 1..3 |> Stream.map(&([&1])) |> MyStream.concat |> Enum.to_list
[1, 2, 3]

到目前为止我想到的是:

defmodule MyStream do
  def concat(lists) do
    Enumerable.reduce(lists, [], fn(x, acc) -> acc ++ x end)
  end
end

这会产生正确的结果,但显然并不懒惰。

我尝试使用失败Stream.Lazy但确实无法理解其内部运作原理。任何解释Stream.Lazy将不胜感激!


Elixir 中的枚举通过约简函数表示。只要您告诉我们如何减少它,我们就可以映射任何结构。

Stream 的整体思想是您可以组合这些归约函数。我们以地图为例:

def map(enumerable, f) do
  Lazy[enumerable: enumerable,
       fun: fn(f1) ->
         fn(entry, acc) ->
           f1.(f.(entry), acc)
         end
       end]
end

您收到一个可枚举的值,并且希望使用该函数映射每个元素f。惰性版本接收实际的归约函数f1并返回一个新函数,该函数接收entry and acc(同样的论点f1会收到)然后打电话f.(entry)在调用之前有效映射元素f1(减少函数)。请注意我们如何逐一映射元素。

其平面地图变体可能类似于:

def flat_map(enumerable, f) do
  Lazy[enumerable: enumerable,
       fun: fn(f1) ->
         fn(entry, acc) ->
           Enumerable.reduce(f.(entry), acc, f1)
         end
       end]
end

现在,每次你打电话f.(entry),您得到一个列表,并且您想要迭代这个新列表的每个元素,而不是迭代整个列表。

我还没有尝试过上面的代码(我可能错过了一些细节),但这就是 Streams 的一般工作方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延迟连接可枚举的列表 的相关文章

  • 使用 Elixir 生成首字母头像 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发 Elixir 并希望提供头像服务 如果用户没有头像 可以制作一个带有他们姓名首字母缩写的头像 如下所示 我真的不知道从哪里
  • dplyr 标准评估:summarise_ 以及求和变量的变量名称

    我遇到了很多与我的问题类似的问题 但只解决了我问题的一部分 我使用带有标准评估的 dplyr 来容纳变量名称 这对于管道中的 filter 和 group by 效果很好 但是 为了总结 我无法为我正在求和的指标提供变量名称 一个例子就可以
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 如何在简单的 Elixir 脚本中加载 Elixir 库?

    在 ruby 脚本中 我可以简单地执行以下操作 require some gem SomeGem do something 我怎样才能在 Elixir 中做类似的事情exs脚本而不创建一个全新的混合项目 到目前为止 我已经在谷歌上搜索了执行
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • 使用任何节点模块在内存中创建 ZIP 文件

    是否有任何节点模块可以在内存中创建 zip 我不想将 zip 文件保存在磁盘上 以便我们可以将这个创建的 zip 文件发送到其他服务器 从内存 做这个的最好方式是什么 这是我的例子 var file system require fs va
  • 类型不匹配插入:binary_id 与 Ecto 变更集

    我有一张桌子applications有外键user id这是一个 Postgresuuid 我在我的web ex primary key id binary id autogenerate true foreign key type bin
  • 与 ecto 的逆多态性

    当前的 Ecto 文档http hexdocs pm ecto Ecto Schema html http hexdocs pm ecto Ecto Schema html仅解释如何构建belongs to多态关联的类型 当多态Commen
  • 流多播 - 读取一次流,但以不同的方式处理它,并使用最少的缓冲

    为了可扩展性和节省资源 最好避免将整个输入流读入内存 而是尝试将其作为流处理 一次读取小块 当您想要对数据执行一件事 例如从 Web 请求中读取数据并将其保存到文件中 时 这在 NET 中很容易实现 简单的例子 input CopyTo o
  • Elixir 中的斜线符号是什么意思?

    在 Elixir 文档中 他们继续使用带有斜杠的奇怪符号 例如 is boolean 1 IO puts 1 String length 1 is function 2 2 我只是猜测 但我认为它指的是数量 但如果是这样的话 为什么文档中没
  • 如何将惰性变量传递给函数参数而不对其求值,除非返回

    这个问题是针对python的 尽管我不介意用户分享其他语言的经验 基本上我的问题是尝试将惰性变量传递给函数 就我而言 我可能无法控制该函数 因此无法更改它以将生成器作为输入 示例 请注意 dict get 是函数的示例 但它很可能是 foo
  • 在 C 中读取字符时打印

    我正在尝试编写一个简单的小代码片段来响应箭头键按下 我知道 up 由 A 表示 并且我有以下代码来检查该序列 while 1 input char fgetc stdin if input char EOF input char n bre
  • Child_process 处理带有回车符 (\r) 的 STDOUT 流

    我正在编写一个简单的应用程序 它允许工作中的内部系统请求从远程服务器到使用 REST 调用发起的另一个远程服务器的复制过程 使用 rsync 我已经对express框架足够熟悉 并且刚刚开始尝试child process库 并偶然发现了一个
  • Delphi 将面板流传输至文件

    今天我有一个关于将表单的一部分流式传输到文件的问题 在此示例中 我使用 Tmemo 而不是文件来查看流 这是我的表格 表单右上角的面板有一些控件 如标签 编辑等 使用 保存面板 按钮将面板保存在 TStream 上 这里是代码 proced
  • magrittr 管道内的 enquo()

    我只是想了解这里出了什么问题 在第一种情况 工作 中 我分配enquo ted 变量的参数 在第二种情况下 我直接在调用中使用带引号的参数mutate library dplyr df lt tibble x 1 5 y 1 5 z 1 5
  • 将数百万条记录写入 mnesia 表会占用大量内存(RAM),并且即使删除这些记录也不会回收

    我正在运行一个 Erlang 应用程序 它经常将数百万条记录写入 mnesia 表以创建调度程序 当时间到期时 记录将被执行并从表中删除 该表配置为 type disk copies type ordered set 我使用事务操作来写入
  • 如何在命令提示符中仅显示具有备用数据流的文件

    我知道要在命令提示符中显示所有文件 如果有 的备用数据流 这是命令dir R 但是 如果我只想显示具有备用数据流的文件 该怎么办 dir s r findstr e DATA or dir r findstr e DATA 第一个将在所有子
  • std::ofstream,写入前检查文件是否存在

    我正在实现文件保存功能Qt使用 C 的应用程序 我正在寻找一种方法来检查所选文件在写入之前是否已存在 以便我可以向用户提示警告 我正在使用一个std ofstream我并不是在寻找Boost解决方案 这是我最喜欢的隐藏功能之一 我随身携带以
  • Log4j 2.x 如何实现惰性参数求值?

    鉴于Java 参数评估机制 http docs oracle com javase specs jls se8 html jls 15 html jls 15 12 4 2 如何Log4j 2 x实施惰性评估 https logging a

随机推荐

  • 如何解析 Powershell 脚本块中的变量

    鉴于我有 a world b write host hello a 如何获取脚本块的解析文本 它应该是包括 write host 的 entre 字符串 write host hello world 更新 补充说明 如果你只是打印 b你得到
  • SurfaceView -> Surface 没有有效的本机窗口 | Android 相机 API |硬件.camera2

    我在最新的相机 API 上使用 Android 开发的 SurfaceView 类时遇到了麻烦 我已经仔细检查过我的最低 API 级别是 21 我通过两种方式解决了这个问题 一种是在 XML 中创建 SurfaceView 然后将其值赋予我
  • FileLoadException:无法在 WebRole 中加载文件或程序集(回收实例)

    我的 WebRole 不会启动 但会不断重新启动并抛出此异常 Application WaIISHost exe Framework Version v4 0 30319 Description The process was termin
  • ASP.NET Request.UserHostName 不包含主机名

    如果创建新数据集 我需要将请求计算机的主机名存储在数据库中 为了向用户清楚地表明这一点 这都是公司内部的 我们在用户填写的表单中将其显示为三个文本框 这三个文本框的填充方式如下 protected void Page Load object
  • 让 sphinx 识别正确的签名

    我一直在尝试为我正在从事的一个开源项目获取文档 该项目涉及镜像客户端和服务器 API 为此 我创建了一个装饰器 它在大多数情况下可用于记录仅对其输入执行验证的方法 你可以找到一个充满这些方法的类here https github com a
  • Android 中的 greenrobot EventBus 发布事件

    通过使用EventBus 我需要在Android中的一个Activity中发布一个事件 MyEvent 并在另一个Activity中接收该事件 我尝试了 greenrobot EventBus 性能测试项目 但不知道如何做 我尝试过活动订阅
  • 我可以在 URL 中使用逗号吗?

    我通常使用 URL 重写将内容 ID 传递到我的网站 所以这 Foo 1 aspx 重写为 Foo aspx id 1 对于特定的应用程序 我需要将多个 ID 传递到单个页面 因此我重写了一些内容来接受这一点 Foo 1 2 3 4 5 a
  • 针对 Java Swing 和 GWT 的交叉开发

    有谁知道有什么工具可以促进 轻松地将应用程序移植到 Java Swing 和 GWT 我有一些 屏幕 在桌面应用程序和浏览器中都完全有意义 我想知道是否有某种通用 API 可以作为目标 以促进创建这两种不同的 视图 见我的评论 我认为这是完
  • 如何使 HTML 按钮不重新加载页面

    我有一个按钮
  • 配置hibernate通过JNDI数据源连接数据库

    大家好 我使用 Hibernate Struts2 Tomcat6 Mysql 作为我的 J2EE 框架 我一直在使用hibernate的内置连接池机制 但事实证明这是有问题的 mysql在8小时后关闭它的连接 不管怎样 我用谷歌搜索了一下
  • 如何更改 Winforms 中选项卡控件的背景颜色?

    有没有办法改变winforms中选项卡控件的背景颜色 使其周围没有白色边框 我尝试了几种不同的方法 但它们都会导致显示相同的白色边框 TabControl对定制的支持很差 我用过这个自定义选项卡控件 http www codeproject
  • 使用 jQuery 解析 xml 响应

    HI all 我使用 jQuery 来解析我的 xml 响应 我有这个 XML
  • 将 FORM DATA 与 Alamofire 结合使用

    我使用 alamofire 一段时间了 但我从未使用过表单数据发布 现在我被困住了 我有 2 个参数 电子邮件 密码 并且不知道如何将它们发布到服务器 谁能给我举个例子吗 这是 Swift 3 0 中 Alamofire 4 0 的示例代码
  • 如何在 A 形框架中显示文本?

    For http aframe io http aframe io 如何在无需创建图像的情况下渲染文本 EDIT 文本组件已登陆 A Frame 主分支 这将在 0 5 0 中推出 该组件将支持字体 对齐方式 锚点 基线 着色器等
  • 如何在主线程的 onCreate/ 中获取房间列表的大小?

    如何轻松获取数据库大小的计数 以便根据数据库是否为空来执行适当的操作 我有一个应用程序数据库 视图模型 存储库 Dao 和所有其他部分 并且我的对象插入 但我无法调用onCreate 数据库中列表的大小 当我试图得到mAppDatabase
  • Perl 标识符中允许使用哪些字符?

    我正在做正则表达式作业 其中一个问题是 使用在线语言参考手册确定 Java Python Perl 和 C 的整数常量和标识符的正则表达式 我不需要关于正则表达式的帮助 我只是不知道 Perl 中的标识符是什么样的 我找到了描述有效标识符的
  • Android 以编程方式创建一个简单的菜单

    我正在尝试创建一个简单的菜单 其中一个按钮将调用一种方法来清除数组 我不想使用 xml 因为我需要的只是一个按钮 像这样的东西 public boolean onCreateOptionsMenu Menu menu button Clea
  • C 中的分号和逗号 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 为什么这些程序可以工作 为什么我没有
  • 如何动态更改 WPF 中 DataGridTextColumn 绑定上的转换器?

    我真的不明白 WPF 和 XAML 并且继承了一些写得很糟糕的代码 所以我可能会扼杀它 但这里是 我继承了一个绑定到 Person 对象列表 在代码后面 的 DataGrid 其中必要的 DataGridTextColumn 在 XAML
  • 延迟连接可枚举的列表

    我想编写一个类似于 List concat 1 的函数 它接受可枚举的列表并将连接的列表作为连续流发出 它会像这样工作 iex gt 1 3 gt Stream map 1 gt Enum to list 1 2 3 iex gt 1 3