在 Haskell 中生成斐波那契数?

2023-12-02

在Haskell中,如何根据第n个斐波那契数等于第(n-2)个斐波那契数加上第(n-1)个斐波那契数的性质生成斐波那契数?

我见过这个:

fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)

我不太明白这一点,也不明白它如何生成一个无限列表而不是包含 3 个元素的列表。

我如何编写通过计算实际定义而不是通过使用列表函数做一些非常奇怪的事情来工作的 haskell 代码?


这是一个不同且更简单的函数,用于计算第 n 个斐波那契数:

fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

您所指的实现依赖于一些关于 Fibonacci 中的值如何相互关联的观察(以及 Haskell 如何根据数据结构本身定义数据结构,从而有效地创建无限数据结构)

您问题中的函数的工作原理如下:

假设您已经有一个无限的斐波那契数列:

   [ 1, 1, 2, 3, 5,  8, 13, .... ]

The tail该列表中的

   [ 1, 2, 3, 5, 8, 13, 21, .... ]

zipWith使用给定的运算符逐个元素地组合两个列表:

   [ 1, 1, 2, 3,  5,  8, 13, .... ]
+  [ 1, 2, 3, 5,  8, 13, 21, .... ]
=  [ 2, 3, 5, 8, 13, 21, 34, .... ]

因此,可以通过添加元素来计算斐波那契数列的无限列表1 and 1到使用斐波那契数列的无限列表的尾部压缩斐波那契数列的无限列表的结果+操作员。

现在,要获取第 n 个斐波那契数,只需获取无限斐波那契数列表的第 n 个元素:

fib n = fibs !! n

Haskell 的美妙之处在于,它在需要时才计算斐波那契数列中的任何元素。

我让你的头爆炸了吗? :)

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

在 Haskell 中生成斐波那契数? 的相关文章

  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 在另一个字符串中查找子字符串的索引 Haskell

    我要创建一个带有两个参数 字符串 的函数 该函数应查看第一个参数是否是第二个参数的子字符串 如果是这种情况 它将返回每个出现的元组 其中包含子字符串的起始索引和子字符串的结尾索引 例如 f String gt String gt Int I
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 如何同时将透镜(或任何其他光学器件)视为吸气剂和设置剂?

    我正在尝试编写一个通用记录更新程序 它允许人们轻松更新记录中的字段existing记录 字段形状相似incoming记录 这是我到目前为止所拥有的 applyUpdater fields existing incoming let gett
  • 自定义 monad 的 MonadTransControl 实例

    的文档monad control提供有关如何创建实例的示例MonadTransControl using defaultLiftWith and defaultRestoreT 该示例适用于以下情况newtype newtype Count
  • 如何使用foldr为列表创建显示实例?

    我想为我的数据类型 我的列表 编写自己的显示实例 到目前为止 我的方法是有效的 但我总是在末尾有一个逗号 我已经尝试用最后一个元素启动折叠并将其从列表中删除 但它很麻烦而且不起作用 有没有更简单的方法来获得正确的解决方案 实际 1 2 3
  • 检索 Haskell 项目中所有导入的列表

    因此 我的最终目标是通过确保项目导入的所有实体都存在于其声称可以使用的版本中 来评估 cabal 文件中依赖项的准确性 一个好的开始是找到单个源文件使用的所有导入实体的列表 可选地包含有关它们来自何处的信息 我愿意暂时忽略类实例的情况 因为
  • 与 Functor 不同,Monad 可以改变形状?

    我一直很喜欢以下关于单子相对于函子的力量的直观解释 单子可以改变形状 函子不能 例如 length fmap f 1 2 3 总是等于3 然而 对于单子来说 length 1 2 3 gt gt g往往不等于3 例如 如果g定义为 g Nu
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 如何测试自定义 StateT 的 Monad 实例?

    我正在学习 Monad Transformers 其中一个练习要求实现 Monad 实例StateT 我想使用以下方法测试我的实现是否符合 Monad 法则validity https github com NorfairKing vali
  • 在ghci中,如何删除现有的绑定?

    我收到一个 绑定影响现有绑定 错误 类似于以下错误this https stackoverflow com questions 2902716 in haskell what does it mean if a binding shadow
  • Cabal 无法安装依赖项,但如果直接询问可以安装它们

    我发现 Cabal 反复出现一个非常奇怪的问题 它影响了我获得可重复的 Haskell 构建的能力 我有一个带有沙箱的阴谋集团项目 如果我做cabal install 我收到以下形式的错误 Y failed during the build
  • Haskell 中的内部爆炸模式是否总是强制使用外部构造函数?

    在 Haskell 中 是否存在对于数据类型 LANGUAGE BangPatterns import Control DeepSeq data D D Int 实例 instance NFData D where rnf D 与具有另一个
  • 为什么 GHC 在这里推断出单态类型,即使禁用了单态限制?

    这是由解析 f f pure 的类型 https stackoverflow com questions 55388119 resolving the type of f f pure 55388309 noredirect 1 comme
  • HASKELL:解决河内塔

    下面的代码解决了 hanoi 使用预定义函数 moveLOD swapLOI 和 swapLID 返回移动列表的问题 MoveLOD 将 1 个圆盘从第一个位置移动到三元组第三个位置中的第三个销钉 此外 包含有关运动信息的字符串会堆积在字符
  • Haskell:确定函数数量的函数?

    可以写一个函数吗arity a gt Integer确定任意函数的数量 使得 gt arity map 2 gt arity foldr 3 gt arity id 1 gt arity hello 0 是的 这可以非常非常容易地完成 ar

随机推荐

  • 我们如何使用 API 访问特定的 Google Analytics 帐户数据?

    我们正在开发一个网络应用程序 允许客户创建和显示产品 我们希望通过我们的 Google Analytics 分析 帐户向客户提供有关其管理面板中的产品的指标 不幸的是 GA API 文档没有说明如何执行此操作 所有示例都基于 OAuth 2
  • 通过单击文本字段来选择日期[重复]

    这个问题在这里已经有答案了 我试图通过单击文本字段来实现日期选择器 我正在使用中提到的代码这个链接 但我没有得到输出 如果有人知道如何通过单击文本字段来显示日期选择器 请为我提供一些解决方案 提前致谢 我看到您的链接并得到了解决方案 因此请
  • jQTouch在AJAX页面加载时执行代码

    当内容是静态时 a href nearme Click a 当内容是AJAX时 a href page html Click a 如何绑定 AJAX page html 加载后发生的事情 这个问题与 jqtouch 有关 它从常规锚标记发出
  • 使用 Web 部署跳过 XML 文档文件

    我正在尝试使用 Web Deploy 发布 NET Web 服务 目前 它在包中包含 XML 文档文件 我在 Visual Studio 的项目属性的 生成 选项卡中取消选中 XML 文档文件 这会阻止发布该 XML 文件 但该项目引用了许
  • 如何在 RabbitMQ 中设置重试次数?

    我正在使用 RabbitMQ 并且有一个保存电子邮件消息的队列 我的消费者服务使消息出队并尝试发送它们 如果由于任何原因我的消费者无法发送消息 我想重新排队消息以再次发送 我意识到我可以执行 basicNack 并将重新排队标志设置为 tr
  • Android SDK 管理器的 GUI 消失了吗?

    我很少为 Android 做一些事情 所以我有点困惑 以前有两种类型的安装 Android Studio 和 Android SDK 我有IDEA 所以不需要Studio 通常我会下载带有 UI 工具来下载其组件的 SDK 我刚得到http
  • cakephp 模型验证错误消息未显示在 hasOne 关联中

    我想要做model验证与association以单一形式 我有两张桌子users 父表 和user details 子表 现在模型验证仅适用于用户表 我也希望它适用于 userDetails 表 它们之间的关系是hasOne 验证仅适用于用
  • CSS 2.1 规范:不折叠父级边距的基本原理(当父级是浮动的或具有除可见之外的溢出时)

    The CSS 2 1 规范 第 8 3 1 节在折叠边距上指出 建立新块格式化上下文的元素的边距 例如 因为浮动和带有 可见 以外的 溢出 的元素 不会 与他们流入的孩子一起崩溃 我花了一段时间才意识到块格式化上下文是 由父母建立并应用于
  • Spring security 自定义 FilterInitationSecurityMetadataSource 实现 403 禁止问题

    简而言之 我正在尝试实现一个自定义 FilterInitationSecurityMetadataSource 以便使用 spring security 5 0 6 和 Spring Boot 2 0 3 在我的 Web 应用程序中动态保护
  • 在 Symfony 2 中使用 gzip / 压缩而不使用 mod_deflate

    我正在研究两个不同的Symfony 2 8项目运行在不同的服务器上 它想使用压缩来加快加载速度 我找到的所有资源都指向mod deflate 但是虽然第一台服务器不提供mod deflate根本 第二个服务器无法使用mod deflate
  • 使用 Powershell Out-Printer 到文件时控制输出位置

    我有一个 Powershell 脚本 它从服务器上的文件夹中检索所有图像文件 jpg png 并将它们 打印 到一个文件 特别是使用特定打印驱动程序的 prn 文件 所有这些都运行良好 问题是我无法弄清楚如何控制 打印 的输出的位置 即它将
  • 如何在 vb.net 中闪烁/闪烁任务栏图标?

    我需要使我的 vb net 应用程序能够在应用程序中收到通知时闪烁 闪烁以吸引用户的注意 就像此图中的 DW 图标一样 我已经在谷歌上搜索了一段时间 并尝试了各种代码示例 但都没有成功 这是我到目前为止所得到的 Public Class F
  • [[NSDate date] keep] 和 [[NSDate alloc] init] 之间的区别

    由于以下两者具有相同的目的 today NSDate date retain and today NSDate alloc init 那么它们之间有什么区别呢 这里的任何事情都与内存分配方法有关 或者其他什么是相应地使用它们的原因 NSDa
  • 如何左右对齐 Flexbox 列?

    使用典型的 CSS 我可以将两列中的一列向左浮动 另一列向右浮动 中间有一些装订线空间 我该如何使用 Flexbox 来做到这一点 http jsfiddle net 1sp9jd32 container width 500px borde
  • Perl:V 5.8.8:在 CentOS5/RHEL5 上找不到 auto/XML/LibXSLT/new.al

    我正进入 状态 无法找到 auto XML LibXSLT new al 我的 CentOS5 机器上安装 Perl 5 8 8 时出错 此问题与 libxml2 和 perl 模块有关XML LibXML XML LibXSLT 对于 1
  • 为什么在函数调用中捕获对象的值?

    当您单击此代码时 应该会弹出一个带有图像编号的警报 for var i 0 i lt 10 i img i click function alert i 你可以看到它不起作用http jsfiddle net upFaJ 我知道这是因为所有
  • DIV 未显示在 Chrome 中

    我刚刚做了一个非常简单的网站 但遇到了问题 在 Firefox 和 Safari 中 我可以看到 id 为 sponsors 的 DIV 但在 Chrome 中它消失了 我在Mac上 有人有解决办法吗 http www tweetup vn
  • 异常:[!]您的应用程序正在使用不受支持的 Gradle 项目

    我正在尝试运行现有的 flutter 应用程序 但收到此异常 我该如何解决这个问题 例外 您的应用程序正在使用不受支持的 Gradle 项目 要解决此问题 请通过运行创建一个新项目flutter create t app
  • HTTP 到 HTTPS 重定向不适用于现有规则

    我已经做了三天了 没有任何结果 我有一个现有的 http 网站 它有很多重定向规则 具体取决于 URL 友好链接 我现在需要强制加载到 https Google 最终会将它们从索引中删除 但有很多指向我的第三方网站页面的链接无法物理改变 下
  • 在 Haskell 中生成斐波那契数?

    在Haskell中 如何根据第n个斐波那契数等于第 n 2 个斐波那契数加上第 n 1 个斐波那契数的性质生成斐波那契数 我见过这个 fibs Integer fibs 1 1 zipWith fibs tail fibs 我不太明白这一点