Clojure - 埃拉托斯特尼的尾递归筛

2023-11-26

我在 Clojure 中实现了埃拉托斯特尼筛法:

(defn sieve [n]
  (loop [last-tried 2 sift (range 2 (inc n))]
    (if
      (or (nil? last-tried) (> last-tried n))
      sift
      (let [filtered (filter #(or (= % last-tried) (< 0 (rem % last-tried))) sift)]
        (let [next-to-try (first (filter #(> % last-tried) filtered))]
        (recur next-to-try filtered))))))

对于较大的n(如 20000)它以堆栈溢出结束。为什么尾调用消除在这里不起作用?如何修复它?


问题:filter进行惰性评估,因此每个新级别的过滤都会挂在调用堆栈上。

修正:改变(filter ...) to (doall (filter ...)).

看解释here.

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

Clojure - 埃拉托斯特尼的尾递归筛 的相关文章

  • 寻找簇的中心

    我有以下问题 进行抽象以找出关键问题 我有 10 个点 每个点与其他点有一定距离 我想要 能够找到簇的中心 即与其他点的成对距离最小的点 令 p j p k 表示点 j 和 k 之间的成对距离p i 是簇的中心点 iff p i s t m
  • 从不带破折号的字符串创建 UUID

    如何从不带破折号的字符串创建 java util UUID 5231b533ba17478798a3f2df37de2aD7 gt uuid 5231b533 ba17 4787 98a3 f2df37de2aD7 tl dr java u
  • 生成 2D 中的非简并点集 - C++

    我想在 2D 平面中创建一大组非退化的随机点云 整个集合中没有 3 个点在一条直线上 我有一个简单的解决方案 它生成一个随机浮点对 P new x y 并检查到目前为止生成的每对点 P1 P2 是否位于同一行 这需要 O n 2 检查添加到
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 整数除法性质

    下面的整数算术性质成立吗 m n l m n l 起初我以为我知道答案 不成立 但现在不确定 它适用于所有数字还是仅适用于某些条件 即n gt l 该问题涉及计算机算术 即q n m q m n 忽略溢出 Case1 assume m kn
  • F# 中的动态编程

    实现解决问题的动态规划算法的最优雅的方法是什么子问题重叠的问题 http en wikipedia org wiki Overlapping subproblem 在命令式编程中 人们通常会创建一个按问题大小索引的数组 至少在一维 然后算法
  • Scala 函数定义参数列表中不同的括号样式

    Scala 中以下两个函数定义有什么区别 1 def sum f Int gt Int a Int b Int Int code 2 def sum f Int gt Int a Int b Int Int code SBT 的控制台 RE
  • Python,质数检查器[重复]

    这个问题在这里已经有答案了 你好 我正在创建一个函数来检查一个数字是否是素数 但它告诉我 9 是一个素数 def eprimo num if num lt 2 return False if num 2 return True else f
  • 比较两棵树的伪代码

    这是我遇到过几次的问题 并且不确信我使用了最有效的逻辑 例如 假设我有两棵树 一棵是文件夹结构 另一棵是该文件夹结构的内存 模型 我希望比较两棵树 并生成一棵树中存在的节点列表 而不是另一棵树中存在的节点列表 反之亦然 是否有公认的算法来处
  • 忽略 Racket 中的多个返回值

    在 Racket 中 可以通过执行以下操作从函数返回多个值 define foo values 1 2 3 然后我们可以通过这样做来绑定它们 define values one two three foo Now one一定会1 two t
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 如何确定字符串的最小公约数?

    我在面试时被问到以下问题 并被它难住了 我遇到的部分问题是要下定决心要解决什么问题 起初我并不认为这个问题在内部是一致的 但后来我意识到它要求你解决两个不同的问题 第一个任务是弄清楚一个字符串是否包含另一个字符串的倍数 但第二个任务是在两个
  • 如何计算一组字符串的最短唯一前缀?

    这是一个非常常见的算法命令行解析 给定一组预定义的长选项名称 计算唯一标识这些选项之一的最短前缀 例如 对于以下选项 help hostname portnumber name polymorphic 这将是输出 he ho por n p
  • 查找两个大小为 n 的数组中第 n 大数的算法

    我有这个问题 给定两个大小为 n 的排序列表 存储在数组中 找到 O log n 计算并集中第 n 大元素的算法 两个列表 我可以看到这里可能有一个技巧 因为它需要第 n 个最大的元素 并且数组的大小也是 n 但我不知道它是什么 我在想我可
  • 我可以让 lein cloverage 跳过特定测试吗?

    我正在进行一个 Leiningen 项目 其集成测试注释如下 deftest manual test v3 preview preview client http localhost 10313 v3 preview 当我这样做时 这些测试
  • 打印从 1 到 100 的质数

    此 C 代码打印出以下素数 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 但我不认为这就是我的书所希望的写作方式 它提到了一些关于数字的平方根的内容
  • n的渐近增长选择下限(n/2)

    如何找到 n select Floor n 2 的渐近增长 我试过 使用扩展并得到它等于 n n 1 floor n 2 1 n floor n 2 知道我该如何从那里去吗 感谢任何帮助 更喜欢提示而不是答案 我同意上面的答案 但想提供更多
  • 大小为 n 的数组,其中一个元素 n/2 次

    给定一个由 n 个整数组成的数组 其中一个元素出现超过 n 2 次 我们需要在线性时间和恒定的额外空间中找到该元素 YAAQ 又一个数组问题 我有一种偷偷的怀疑 这类似于 在 C 中 We don t need an array publi
  • webjure 与 compojure?

    我听说过两个基于 Clojure 的 Web 应用程序框架 Webjure 和 Compojure 有人可以告诉我哪个更好吗 现在您可以添加Ring http groups google com group clojure browse t
  • Prolog中计算数字是否为素数

    我正在尝试计算输入是否是素数 但出了问题 这是我的代码 primeNumber X prime prime A 1 prime prime A B R is A mod B R 1 R A prime prime X B B lt A Ne

随机推荐

  • Mac OS X / iOS 中的正则表达式匹配表情符号

    Note 在不支持所包含表情符号的系统上 这个问题可能看起来很奇怪 这是一个后续问题如何从字符串中删除表情符号 我想构建一个正则表达式来匹配可以在 Mac OS X iOS 中输入的所有表情符号 明显的 Unicode 块涵盖了大部分表情符
  • 如何在 MVVM 中使用同一个 ViewModel 拥有多个视图?

    我对 WPF 和 MVVM 都很陌生 在尝试设置DataContext到两个单独视图中的 ViewModel 的同一实例 这是因为
  • 如何在 AngularJS 中关闭浏览器窗口

    我有一个登录表单作为单独的浏览器窗口弹出 一旦 API 验证用户已登录 我如何在 AngularJS 中关闭该登录浏览器窗口 Use window close in window服务 您可以像这样将结果广播到另一个控制器AngularJS
  • 是否可以捕获包含 Windows 7 DWM 缩略图的窗口?

    我开始相信你不能用 Windows API 做任何事 我有两个窗户 其中有一个 DWM 缩略图 我想要做的是 我希望能够将窗口屏幕的缩略图捕获到另一个窗口中 当我使用 bitblt 执行此操作时 除了缩略图之外的所有内容都会被复制 它只是位
  • 在android中画圆[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何使用 Android SDK 在两点之间绘制圆 创建一个位图 然后在其画布上绘制 然
  • Postgresql base64 编码

    我需要将 db 值转换为 base64encode 我试过 select encode cast est name as text base64 from establishments 它显示错误 SQL select encode str
  • 在提交表单之前添加确认提醒

    我有一个表单允许用户从数据库中删除一些数据 我想要一些确认信息以防止意外删除 我想做以下事情 按下提交后 会弹出警告 您确定吗 如果用户点击 是 则运行脚本 如果用户点击 否 则不要提交脚本 如何才能做到这一点 我已经添加了 onSubmi
  • np.array() 和 np.asarray() 有什么区别?

    NumPy 和 NumPy 有什么区别np array and np asarray 我什么时候应该使用其中一种而不是另一种 它们似乎产生相同的输出 The 的定义asarray is def asarray a dtype None or
  • table-header-group 、 table-footer-group 属性在 Chrome 中不起作用

    这是我的代码 http furkan brove net syflm php 当我打印它时 它在 Chrome 中不起作用 我希望它在打印模式下将页眉和页脚放在每一页上 此外 在每个浏览器中 最后一个页脚位于内容的底部 但我希望它位于页面底
  • python中的完全单调插值

    我有一些数据 例如 我想拟合一条可微分的单调曲线 我试过PchipInterpolator类但在一个非常相似的图表上 结果是 这并不单调 如何将单调曲线拟合到这样的数据 以下是另一个类似图表的 y 值示例集 0 11091571190236
  • Xcode 6.3 两次构建所有 swift 文件

    我刚刚升级到 Xcode 6 3 并试图将编译时间减少到可管理的程度 我的项目中有大约 120 个 swift 文件 类 编译需要 2 3 分钟 我的项目还有两个测试目标 UnitTests and AutomatedTests Here
  • Django forms.DateInput 不应用 attrs 字段中给出的属性

    尝试通过 django 的 attrs 说明符应用时 占位符 类未设置表单 日期输入 表格是一个模型表单 并根据docs 采用与 TextInput 相同的参数 但多了一个可选参数 这是代码 widgets my date field fo
  • Javascript 中除法结果的四舍五入

    我正在 Javascript 中执行以下操作 0 0030 0 031 如何将结果四舍五入到任意位数 a 的最大数量是多少var将举行 现代浏览器应该支持一种称为toFixed 这是取自网络的例子 Example toFixed 2 whe
  • 裁剪和缩放 MTLTexture

    我可以创建一个新的吗MTLTexture尺寸w2 h2现有的MTLTexture region x1 y1 w1 h1 PS 我考虑过使用MTLTexture buffer makeTexture但偏移量需要是64字节 为什么 以下是您可以
  • 如何更改 joptionpane 的大小和字体?

    您可以更改 JOptionPane 文本的字体和大小吗 我尝试过 只有当我在该特定的 java 类上 运行文件 时它才有效 如果您启动整个项目 它不会更改字体 我只想更改特定的 JOptionPane 而不是全部 这是代码 UIManage
  • + 运算符如何用于合并委托?

    例如 delegate void SomeDelegate SomeDelegate a new SomeDelegate gt Console WriteLine A SomeDelegate b new SomeDelegate gt
  • Flexbox 溢出滚动条显示在主体而不是内部元素上

    问题 在使用带有溢出的 Flexbox 的全尺寸应用布局 100 宽度 100 高度 中 在 Firefox IE 或 Edge 中不会显示滚动条 它们在 Chrome 中确实显示正常 FF IE Edge 中不是在元素上设置垂直滚动条 而
  • kafka ack=all 和 min-isr

    Summary Kafka 的文档和代码注释表明 当生产者设置acks被设定为all那么只有在以下情况下才会将 ack 发送给生产者 所有同步副本都已赶上 但是代码 Partition Scala checkEnoughReplicasRe
  • “[<-.data.frame”中出现 R 错误...替换有 # 项,需要 #

    我是 R 新手 这超出了我的能力范围 下面的脚本使用两个虚拟表 结果和计数 每个表都有两列 A 和 B 我正在运行排列测试来比较 A 和 B 的结果 具体来说 我正在查看 A 和 B 的结果 计数 结果和计数都有 20 行 并且我编写了一个
  • Clojure - 埃拉托斯特尼的尾递归筛

    我在 Clojure 中实现了埃拉托斯特尼筛法 defn sieve n loop last tried 2 sift range 2 inc n if or nil last tried gt last tried n sift let