Haskell 惰性评估和重用

2023-12-19

我知道如果我要在 Haskell 中计算平方列表,我可以这样做:

squares = [ x ** 2 | x <- [1 ..] ]

然后当我这样调用方块时:

print $ take 4 squares

它会打印出 [1.0, 4.0, 9.0, 16.0]。其计算结果为 [ 1 ** 2, 2 ** 2, 3 ** 2, 4 ** 2 ]。现在,由于 Haskell 是函数式的,并且每次的结果都是相同的,如果我在其他地方再次调用 squares,它会重新评估已经计算出的答案吗?如果我在调用前一行后重新使用 squares,它会重新计算前 4 个值吗?

print $ take 5 squares

它会评估 [1.0, 4.0, 9.0, 16.0, 5 ** 2] 吗?


在这种情况下,不会重新计算,因为列表实际上已构建,并且正方形列表在调用后继续存在。然而,Haskell 函数一般不会被记忆。这只适用于这样的情况,即您没有显式调用函数,只是探索(内)有限列表。

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

Haskell 惰性评估和重用 的相关文章

  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Haskell 标准库是什么?

    GHC专用库可以称为标准库吗 或者只有 Haskell 2010 报告中的那些才算数 许多 GHC 库可以通过 Haskell 报告中的函数来实现 可能与 C 绑定相结合 但其他语言依赖于 GHC 特定的扩展 因为语言报告中定义的当前 Ha
  • 检查对以下内容的理解:“变量”与“变量” “价值”、“功能”与“抽象”

    这个问题是后续问题this one https stackoverflow com questions 25327705 is function a sort of variable 25329157 25329157在学习 Haskell
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • ST monad 是如何工作的?

    我知道 ST monad 有点像 IO 的弟弟 而 IO 又是添加了状态 monadRealWorld魔法 我可以想象状态 也可以想象 RealWorld 以某种方式放入 IO 中 但每次我写一个类型签名ST the sST monad 的
  • 如何在Haskell中实现词法分析器和解析器

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

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 迭代打印列表中的每个整数

    假设我有一个整数列表l 1 2 我想打印到stdout Doing print l产生 1 2 假设我想打印不带大括号的列表 map print l产生 No instance for Show IO arising from a use
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • 为什么在 where 子句中使用类型签名如此罕见?

    它是否有助于编译器优化 或者只是添加额外类型签名的多余工作 例如 人们经常看到 foo a gt b foo x bar x where bar x undefined 而不是 foo a gt b foo x bar x where ba
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • 终止 Julia 数组理解中的 For 循环

    我在 Julia 中有以下代码行 X i i 2 for i in 1 100 if i 2 5 0 基本上 它返回一个元组列表 i i 2 from i 1 to 100如果剩余的i 2 and 5为零 我想做的是 在数组理解中 跳出 f
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数
  • 如何只修改记录的一个字段而不完全重写它? [复制]

    这个问题在这里已经有答案了 It s the second time I m tackling this problem And for the second time this is while working with the Stat
  • dplyr 标准评估:summarise_ 以及求和变量的变量名称

    我遇到了很多与我的问题类似的问题 但只解决了我问题的一部分 我使用带有标准评估的 dplyr 来容纳变量名称 这对于管道中的 filter 和 group by 效果很好 但是 为了总结 我无法为我正在求和的指标提供变量名称 一个例子就可以
  • Python 比编译的 Haskell 更快?

    我有一个用 Python 和 Haskell 编写的简单脚本 它读取包含 1 000 000 个换行符分隔的整数的文件 将该文件解析为整数列表 对其进行快速排序 然后将其写入已排序的不同文件中 该文件与未排序的文件具有相同的格式 简单的 这
  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 实现“LazyProperty”类 - 这是一个好主意吗?

    我经常发现自己编写的属性是惰性评估的 就像是 if backingField null backingField SomeOperation return backingField 代码不多 但如果您有很多属性 它确实会重复很多次 我正在考
  • 如何测试自定义 StateT 的 Monad 实例?

    我正在学习 Monad Transformers 其中一个练习要求实现 Monad 实例StateT 我想使用以下方法测试我的实现是否符合 Monad 法则validity https github com NorfairKing vali
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if

随机推荐

  • 在 d3.js 中,对于空数据跳过append()

    我正在用小圆项目符号绘制折线图 但是 数据中存在漏洞 这些漏洞在我的数组中由 null 表示 当然 没有数据的地方就不应该有圆圈 但 d3 的append 方法无论如何都会添加它们 我该如何避免这种情况 这是一个jsFiddle 样机 ht
  • 从 .glsl 文件读取 OpenGL 着色器语言

    我正在尝试从文件中读取着色器字符串 但是 我遇到了一个问题glShaderSource 功能线 如你所知 glShaderSource takes const char 我必须声明char 用于从文件中读取 因此 我使用强制转换来转换类型
  • .NET 异常有多慢?

    我不想讨论何时抛出异常以及不抛出异常 我想解决一个简单的问题 99 的情况下 不抛出异常的争论都围绕着异常缓慢而另一方声称 通过基准测试 速度不是问题 我读过大量与这一方面或另一方面相关的博客 文章和帖子 那么是哪一个呢 答案中的一些链接
  • 列表理解同时迭代两个变量[重复]

    这个问题在这里已经有答案了 是否有可能使用列表理解同时迭代两个变量 同时增加两个变量的循环位置 请参阅下面的示例 a 1 2 3 4 5 b 6 7 8 9 10 c i j for i in a for j in b This works
  • 在 Java 中如何查找前 2 个星期一的日期?

    可能是这样的 for int i 0 i lt 15 i Calendar cal new GregorianCalendar cal add Calendar DAY OF MONTH 1 if cal Calendar DAY OF W
  • 如何使用 JS (Internet Explorer) 以编程方式下载文件

    我有一个网页 其中有一个按钮 单击该按钮后 会生成一个 通过从 json 进行转换 csv 文件 该文件由浏览器下载 它本质上使用了这个逻辑jsfiddle https jsfiddle net 1ecj1rtz 这一切在 Chrome 中
  • C# DataGridViewButtonCell 设置按钮文本

    我需要添加我的DataGridViewButtonCell to Column 并且我需要用不同的名字来命名彼此 但我没有找到任何文本属性 有人可以帮我吗 我做那些事 DataGridViewButtonCell b new DataGri
  • linux如何删除第N行的最后一个字符

    我有一个具有类似结构的大文档 Data800 Data900 Data1000 我将如何删除第三行到最后一行的最后一个字符 在本例中 逗号位于 Data1000 旁边 输出应如下所示 Data800 Data900 Data1000 它始终
  • 系统上的 -isystem 包含目录会导致错误

    下面的代码是怎么回事 include
  • ValueError:无法从重复的轴 Pandas 重新索引

    所以我有一个基于fund id生成的时间序列数组 def get adj nav self fund id df nav read frame super class self filter fund id fund id nav gt 0
  • 使用 autofac 创建需要参数的对象的正确方法是什么?

    我想我已经了解了有关依赖倒置和使用 IoC 容器的大部分知识 但有一件事对我来说仍然不太清楚 如何使用 autofac 来自动化以下工厂 public class WidgetFactory public static IWidget Cr
  • 计算颜色值关系[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可以计算两种颜色之间关系的网络应用程序 我有一个现有的样式指南 其中包含已确定的十六进制值 我想将
  • 我无法从 Firebase 存储(Angular/Ionic)获取图像 downloadUrl

    我正在尝试从 firebase 获取图像的 downloadUrl 所有属性 如 timeCreated fullPath contentType 都运行良好并正确推送 但我不知道为什么 downloadUrl 不起作用 captureAn
  • $_POST 中的 JQuery Mobile POST 数据为空

    我遇到了 JQuery Mobile 对我来说是新的 和 AJAX 调用的问题 我正在使用以下代码 ajax type POST url http correct url post todoitem beforeSend addHeader
  • 将富文本粘贴到 Flash 中?

    粘贴到 Flash 时是否可以捕获富文本 使用 Flex TextEditArea 我可以在 Flash 本身中粘贴格式丰富的文本 但如果我尝试从外部源 例如网页 Microsoft Word 等 粘贴 它会以纯文本形式出现 反之亦然 如果
  • 如何在 Nuxt 2 或 3 中使用 .env 变量?

    我的项目根目录中有 env 文件 在我的 nuxt 配置中 我使用变量来配置 ReCaptcha 如下所示 import dotenv from dotenv dotenv config export default modules nux
  • 基于 SQLite 支持的 ContentProvider 更新 ListView

    我是一名新的 Android 开发人员 似乎有点不知所措 当我向列表添加更多内容时 我试图进行 listView 更新 ListView 基于 SQLite 数据库 我能够通过为 SQLite 数据库创建一个 ContentProvider
  • 无法将数据写入 Firebase 实时数据库 Android

    我创建了一个 Firebase 并且可以将数据写入身份验证 但是 我无法将数据写入实时数据库 I have connected to Firebase 我已经添加了实时数据库 Import the BoM for the Firebase
  • 您在 Perl 程序中使用异常类吗?为什么或者为什么不?

    我有很多关于人们如何在 Perl 中使用异常的问题 我已经包含了一些有关例外情况的背景说明 如果您愿意 可以跳过此内容 但请花点时间阅读问题并做出答复 Thanks Perl 异常的背景 Perl 有一个非常基本的内置异常系统 为更复杂的使
  • Haskell 惰性评估和重用

    我知道如果我要在 Haskell 中计算平方列表 我可以这样做 squares x 2 x lt 1 然后当我这样调用方块时 print take 4 squares 它会打印出 1 0 4 0 9 0 16 0 其计算结果为 1 2 2