具有递归和列表理解的素数生成器

2024-01-02

我是 Haskell 编程的新手,无法理解下面的列表理解如何扩展。

primes = sieve [2..] 
sieve (p:xs) = p : sieve [x | x <-xs, x `mod` p /= 0]

有人可以纠正我如何sieve扩建工程:

  • 当我们进行模式匹配时sieve, p会联想到2 and xs from [3..].
  • 接下来,在列表理解中x<-3,但是我们如何才能调用 sieve3当没有短路的时候。

我不明白的另一件事是递归在这里是如何工作的。

我认为,如果可以对前几个数字一次扩展上述一步,直到5.


让我们做一些等式推理。

primes = sieve [2..]
sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0]

The [2..]是语法糖[2, 3, 4, 5, ...] so

primes = sieve [2, 3, 4, 5, 6, ...]

Inline sieve once:

primes = 2 : sieve [x | x <- [3, 4, 5, 6, 7, ...], x `mod` 2 /= 0]

First, x获得价值3它通过了mod 2 filter

primes = 2 : sieve (3 : [x | x <- [4, 5, 6, 7, ...], x `mod` 2 /= 0])

Inline sieve再次(我重命名为x to y以防止混淆)

primes = 2 : 3 : sieve [y | y <- [x | x <- [4, 5, 6, 7, ...], x `mod` 2 /= 0], 
                            y `mod` 3 /= 0]

Now x = 4失败了mod 2过滤但是x = 5通过它。所以

primes = 2 : 3 : sieve [y | y <- 5 : [x | x <- [6, 7, 8, ...], x `mod` 2 /= 0], 
                            y `mod` 3 /= 0]

This y = 5还通过了mod 3过滤所以现在我们有

primes = 2 : 3 : sieve (5 : [y | y <- [x | x <- [6, 7, 8, ...], x `mod` 2 /= 0], 
                                 y `mod` 3 /= 0])

扩展sieve再一次 (z代替y)让我们

primes = 2 : 3 : 5 : sieve [z | z <- [y | y <- [x | x <- [6, 7, 8, ...], 
                                                    x `mod` 2 /= 0], 
                                          y `mod` 3 /= 0], 
                                z `mod` 5 /= 0]

并且扩张以同样的方式继续进行。

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

具有递归和列表理解的素数生成器 的相关文章

  • Python - 在和不在列表中语法错误

    我正在尝试从另一个现有的浮点数列表构建一个新的浮点数列表 通过示例更容易识别第一个列表的预期内容 price list 39 99 74 99 24 99 49 99 预期的后期功能 print new price list gt gt 2
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • Haskell Cabal 包 - 找不到 Paths_ 模块

    我正在开发一个 Haskell 项目 Happstack 服务器 Blaze HTML 前端作为主要库 我想添加一个静态数据目录 看起来你可以使用 Cabal 使用自动生成的Path
  • 访问函数中的环境

    In main我可以读取我的配置文件 并将其提供为runReader somefunc myEnv正好 但somefunc不需要访问myEnv读者提供 链中的下一对也没有提供 需要 myEnv 中某些内容的函数是一个微小的叶函数 如何在不将
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • c中使用递归的strlen函数

    我对递归主题很陌生 我一直在尝试使用递归编写 strlen 函数 这就是我尝试过的 int strlen char str int i if str i 0 return i 1 return strlen str i 我尝试了一些非常相似
  • 递归和大O

    我最近正在完成一项涉及递归和大 O 表示法的计算机科学作业 我相信我很好地理解了这一点 虽然当然不是完美的 但是有一个问题给我带来了最多的问题 奇怪的是 一看就知道是作业上最简单的一个 使用大哦符号提供最佳增长率来解决以下递归问题 T 1
  • ErrorT 已弃用,但 exceptT 不适合

    我有一个一元计算 在某些时候 由于单子模式匹配 它开始需要 MonadFail 约束 我的简单解决方法是使用以下命令运行它 fmap either error id runErrorT 然而哎呀 Deprecated Use Control
  • 递归替换多维数组中特定键每次出现的值

    我有一个数组 其数组深度可能会有所不同 例如 array one gt array array something gt value array something2 gt value2 another gt anothervalue tw
  • 在 Haskell 中计算移动平均线

    我正在学习 Haskell 所以我尝试实现移动平均函数 这是我的代码 mAverage Int gt Int gt Float mAverage x a fromIntegral k fromIntegral x k lt rawAvera
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 用于从深层嵌套列表/元组中提取元素的递归函数

    我想编写一个从深层嵌套元组和列表中提取元素的函数 假设我有这样的东西 l THIS THAT a b c THAT d e f 我想要一个没有 这个 和 那个 的简单列表 list a b c d e f 这是我到目前为止所拥有的 def
  • 如何返回n对括号的所有有效组合?

    def paren n lst for x in range n current string join lst solutions list for i in range len current string 1 close curren
  • 我应该在 Turtle 或 Foldl 包中使用折叠吗?

    我在使用 Turtle 时遇到了一些困难 直到盯着难以理解的错误消息几分钟后才意识到我使用了错误的fold功能 https hackage haskell org package turtle 1 5 8 docs Turtle Shell
  • 在 Haskell 中,为什么我必须在这段代码中使用美元符号?

    我仍在尝试破解这段代码 import Data Char groupsOf groupsOf n xs take n xs groupsOf n tail xs problem 8 x maximum map product groupsO
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 递归方法比交互式方法慢 10 倍 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 代码已尽可

随机推荐

  • 如何防止 WordPress 页面被用户删除

    一些 WordPress 插件会创建页面或帖子 插件的正常功能依赖于该页面或帖子的存在 例如 管理电子邮件列表的插件可能依赖于取消订阅页面 用户可能会有意或无意地删除该页面 插件如何防止其页面被删除 首先 当您创建页面时 您可以将其 ID
  • 直接在 Intellij Idea/WebStorm 中运行笑话测试?

    我在用着jest https facebook github io jest 在我的 ReactJS 应用程序中编写测试 到目前为止 要运行我的测试套件 我需要输入 npm test 这是 package npm 中的片段 scripts
  • Python3没有这样的文件或目录

    我正在尝试制作 python3 可执行脚本并从 shell 运行它们 我的系统上安装了 python 3 4 0 所以 我添加了 home spandan python codes 目录到Python路径 因为我计划将我的脚本和模块保留在这
  • AWS CodePipeline 将多个存储库作为单一源进行跟踪

    我正在调查 CodePipeline 是否适用于我们的用例 我们有数百个存储库 全部由 CodeCommit 托管 除了较小的配置之外 所有这些的构建 测试 发布过程都是相同的 我想做的是建立一个管道 用于构建 测试 发布在任何这些存储库中
  • R传单。将点数据分组到单元格中以汇总许多数据点

    早上 下午或晚上 我有以下位置数据 调整自 网格单元内采样点的计数 https stackoverflow com questions 56217221 count of sampling points within a grid cell
  • Eclipse Luna CDT:什么是标头变体?

    我很难让 Eclipse Indexer Codan 识别头文件中的某些数据声明 有一个新的偏好索引所有标头变体 http wiki eclipse org CDT User NewIn83 Preferences for header v
  • 使用“功能分支”与重构兼容吗?

    特征分支 是指每个功能都在自己的分支中开发 只有在经过测试并准备好交付后才合并到主线中 这允许产品所有者选择进入给定发货的功能 并在出现更重要的工作时 保留 部分已编写的功能 例如 客户打电话给 MD 投诉 重构 正在改造代码以改进其设计
  • 将应用程序更新到应用程序商店:审核时间以及商店的评分?

    这太令人沮丧了 我已将我们的应用程序上传到应用程序商店 8 天后获得批准 然后我下载了它 发现加速度计卡住了 所以我去了itunes connect 将发布日期更改为未来的发布日期 取消选中世界上所有的商店 它说 已被开发人员删除 这就是我
  • 透明着色器允许下面的对象显示在上面

    在我的场景中 笑脸 带有 png 图像的四边形 放置在 Y 0 处 点 带有平铺 3X3 的四边形 放置在 Y 0 25 处 我需要用于笑脸的着色器是透明漫反射 因为我使用的是圆形 png 图像 但我在下面使用的点显示在笑脸上方 使用任何其
  • C读取bmp文件

    我正在尝试将 bmp 文件读入我的程序 但遇到了一些问题 读入文件后 如果我告诉它打印 pBmp gt header fileSize 它会显示 16 但如果我在十六进制编辑器中查看它 如果我将该值修改为正确的文件大小 则文件大小部分为 F
  • 通过 PyTumblr 仅返回 20 个帖子

    我在用PyTumblr https github com tumblr pytumblr返回我所有的帖子 但它只返回 20 我找到了 posts 函数的 kwarg 称为 limit 但当我指定 1000 时 它仍然返回 20 知道我做错了
  • 在 C# 中使用 crl(证书吊销列表)验证证书

    我想使用 CRL 属性验证证书 但是 当我在设置 CRL 检查标志后调用证书上的 verify 方法时 会出现以下错误 1 撤销状态未知 gt 吊销功能无法检查证书的吊销情况 2 离线撤销 gt 吊销功能无法检查证书的吊销 因为吊销服务器已
  • 当相应的py被移动时自动删除pyc文件(Mercurial)

    我三个月前就预见到这个问题可能会发生 并被告知要努力避免它 昨天 我被它咬了一口 很厉害 现在它花了我真金白银 我很想解决它 如果我将一个 Python 源文件移动到另一个目录中 我需要记住告诉 Mercurial 它已移动 hg move
  • ArrayList 的 ArrayList 添加和检索元素

    我有一个整数数组列表 mainList 里面有整数数组 subList 我试图将整数数组元素添加到 mainList 并稍后显示它们 将 subList 添加到 mainList 并显示 subList 中的所有元素 2 subLists
  • Windows - Android SDK 管理器未列出任何要安装的平台或软件包

    当我使用可用的 exe 文件安装 Android SDK 并且打开 Android SDK 管理器后 我看不到任何需要安装的附加软件包 列出的只是 Tools 文件夹下的 Android SDK Tools Extras 文件夹下也不显示任
  • 使用子目录时PyQt4 SIGNAL/SLOT问题

    预先感谢您花时间阅读本文 抱歉 它有点冗长 但希望它能完全解释问题 包含演示该问题的剥离代码 我的 PyQt4 信号 插槽有问题 虽然如果我在单个文件中编写 我可以使一切正常工作 但如果我希望使用的某些函数移动到子目录 类 我就无法使一切正
  • 我的 CASE 语句查询有什么问题

    我正在尝试解决 13http www sqlzoo net wiki The JOIN operation http www sqlzoo net wiki The JOIN operation 列出每场比赛以及每支球队的进球数 如图所示
  • 如何在 PySpark 中转换数据帧列中的 JSON 字符串?

    我有一个 pyspark 数据框 如下所示 c0 c1 object F 0 object F 1 object F 2 object E 3 object F 4 object F 5 object F 6 object S 7 obje
  • 由于四舍五入,计算 1 到 100 之间数字的程序永远不会猜到“100”

    我刚刚开始接触 C 我编写了一个小程序 选择 1 100 之间的随机数 然后对其进行修改以使程序计算出该数字 并计算所需的猜测次数 程序中的所有内容都有效 除了一件事 我正在使用一个公式来猜测当前猜测值与之前的最高 最低值之间的差异 因此对
  • 具有递归和列表理解的素数生成器

    我是 Haskell 编程的新手 无法理解下面的列表理解如何扩展 primes sieve 2 sieve p xs p sieve x x lt xs x mod p 0 有人可以纠正我如何sieve扩建工程 当我们进行模式匹配时siev