如何创建惰性序列向量

2024-04-26

运行它按预期工作:

(defn long-seq [n]
  (lazy-seq (cons 
             (list n {:somekey (* n 2)})
             (long-seq (+ n 1)))))
(take 3 (long-seq 3))
; => ((3 {:somekey 6}) (4 {:somekey 8}) (5 {:somekey 10}))

不过我想用向量做同样的事情:

(defn long-seq-vec [n]
  (lazy-seq (into 
             (vector (list n {:somekey (* n 2)}))
             (long-seq-vec (+ n 1)))))
(take 3 (long-seq-vec 3))

这给了我一个堆栈溢出。为什么?


主要原因是向量并不懒惰- 所以into贪婪地调用消耗了由以下方式产生的递归序列long-seq-vec并导致堆栈溢出。由此推论,不可能创建无限向量(通常,只有惰性或循环的数据结构才能创建无限数据结构)。

它在第一个示例中有效,因为cons当 cons 到一个惰性序列的前面时,它很乐意表现出惰性,因此该序列可以是无限的。

假设您实际上想要无限的向量序列,我建议如下:

(defn long-seq-vec [n]
  (lazy-seq (cons 
              (vector n {:somekey (* n 2)})
              (long-seq-vec (+ n 1)))))

(take 3 (long-seq-vec 3))

=> ([3 {:somekey 6}] [4 {:somekey 8}] [5 {:somekey 10}])

或者作为替代方案,您可以使用for这本身就是懒惰的:

(defn long-seq-vec [n]
  (for [x (iterate inc n)]
    (vector x {:somekey (* x 2)})))

我更喜欢这个,因为它避免了lazy-seq/cons样板文件,避免递归,并且在表达你的函数的作用方面更加清晰......如果你愿意的话,它更加“声明性”。你也可以使用map以类似的方式。

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

如何创建惰性序列向量 的相关文章

随机推荐

  • CMYK 2 RGB 问题

    我在将 CMYK 颜色转换为 RGB 时遇到问题 在互联网上有很多公式可以转换它 但例如当我将 CMYK 0 100 100 0 转换为 RGB 时 它得到的值是 255 0 0 但在 Adob e Photoshop 中 RGB 值是 2
  • 将列表组合成元组对 (x, y)

    我正在尝试组合通过传入的数字对sys argv 例子 python myscript py 35 12323 112 76767 36 33345 112 76890 33 68689 111 8980 我的目标是将它们变成元组中的两个集合
  • 使用 PInvoke 从 C# 读取具有“union”类型的 C 结构

    我正在尝试将用 C 构建的结构引入托管端 C 让我们假设这个结构 C 代码 typedef struct S int i union TypeA a TypeB b TypeC c uni S 现在 我创建 C 包装类 StructLayo
  • 查询 Firestore 中的特定日期

    我正在尝试查询 Firestore 中的指定日期 到目前为止我已经尝试过这段代码 let ref db collection schools doc DglhflywuybkOuCq7tGW let start new Date 2018
  • 如何在scala的specs2测试中使用jUnit的TemporaryFolder?

    我正在使用 Playframework 编写测试 我需要创建一个临时文件 RunWith classOf JUnitRunner class DiagnosticSpec extends Specification Rule val tem
  • 双前向/后向管道操作符是否有记录?

    我记得读过有关双管道运算符的内容 gt 和 Example let print a b sprintf O O a b 1 2 gt print val it string 1 2 双 向前 向后 管道运算符记录在以下列表中MSDN 上的
  • 操作内存中具有多个空字符的 C 字符串

    我需要在一块内存中搜索一串字符 但其中几个字符串的每个字符都为空分隔 如下所示 我 a m a s t r i n g 所有 都是空字符 我的问题来自于实际将其记入内存 我尝试过多种方法 例如 char str2 str2 char mal
  • 如何覆盖 app/code/core/Mage/Core/functions.php 中的 Magento 函数

    我需要重写此文件中的一个函数 应用程序 代码 核心 Mage Core functions php 问题是 它是如此核心 以至于没有与之关联的类 可能是因为 Core 甚至不是一个模块 有谁知道如何在没有类的情况下覆盖文件中的函数 任何帮助
  • 保护 AWS API 网关的安全

    我们有一个现有的应用程序 并且正在开发 AWS 中的应用程序所需的新 API 我们希望对 AWS API 启用基于角色的访问控制 而无需将用户迁移到 AWS Cognito 我们认为我们可能需要使用开发人员身份提供商和 IAM 角色 但不确
  • NFC 中的 AAR 记录:有效负载在哪里?

    根据这个答案 https stackoverflow com a 9235624 115145经测试验证 当您使用 Android Beam 推送包含 AAR 记录的 NFC 消息时 接收设备将启动MAIN LAUNCHERAAR 中指定的
  • Snakemake 声明规则以非零退出代码退出,即使使用“|| true”?

    我的 Snakemake 管道断言 每当我运行任何规则时 我的代码都会引发非零退出代码 即使我的代码在我手动运行相同的代码时返回错误代码 0 并且在 Snakemake 中运行时它可以正常工作 根据建议这个问题 https stackove
  • 如何在Linux shell脚本中将文本文件中的两行合并到同一行中

    我使用 wget 命令从 Nagios 下载了它的 html 文件 然后使用以下代码将该 html 文件转换为 Textfile html2text width 180 file html gt a txt 然后我剪切了前 10 行 因为我
  • 最长 K 顺序递增子序列

    为什么我创建了一个重复的线程 阅读后我创建了这个线程允许有 K 个例外的最长递增子序列 https stackoverflow com questions 56155854 longest increasing subsequence wi
  • 当我加入第二个表时总和不正确

    这是我第一次请求你的帮助 实际上我必须创建一个查询 并为其做了一个类似的示例 我有两张桌子 Report ReportID Date headCount Production ProdID ReportID Quantity 我的问题是使用
  • 断言某个方法仅被调用一次

    我想断言一个方法只被调用一次 我正在使用 RhinoMocks 3 5 这是我认为可行的 Test public void just once var key id of something var source MockRepositor
  • 如何在flex中绘制虚线

    经过一番搜索和阅读 Graphics 类文档后 我找不到指定线条的线条样式的方法 我的意思是这条线是实线还是虚线 有人可以帮助我吗 Thanks 无论如何 您不能仅仅通过使用 Flex 库类 当然 你也可以自己做 这是一个实现它的类 根据找
  • std::condition_variable 是第一次检查条件,还是必须等待别人通知?

    std condition variable 是第一次检查条件 还是必须等待别人通知 这是通过阅读来回答的文档 https en cppreference com w cpp thread condition variable wait 就
  • ORDER BY 子句中的 T-SQL IF 语句

    有没有办法我可以做类似的事情 sortType SELECT FROM table ORDER BY if sortType id table Id else if sortType date table Date 该语法看起来如何 谢谢
  • 使用 nextpagetoken 在 Google Apps 脚本查询中提取超过 500 个结果

    在一个有用的回应中这个帖子 https stackoverflow com questions 34398021 directory query returns only 100 users我了解到我可以一次从我的域目录中提取最多 500
  • 如何创建惰性序列向量

    运行它按预期工作 defn long seq n lazy seq cons list n somekey n 2 long seq n 1 take 3 long seq 3 gt 3 somekey 6 4 somekey 8 5 so