为什么不是 (20 >) 。长度 。取 10 === const True

2024-04-18

tl;dr

事实难道不是这样吗20 < length $ take 10 $ whatever需要whatever成功地对列表进行模式修补(至少[] or (_:_))“缺乏”懒惰?

或者,换句话说,为什么不(20 >) . length . take 10 === const True,因此将它们中的任何一个应用于任何事物都不需要对论证进行任何评估?

Is (20 >) . length . take 10 !== const True有必要吗?还是设计选择?无论哪种情况,为什么?

Foreword

这是后续我之前的问题 https://stackoverflow.com/q/72133599/5825294.

在那里我问了为什么fix https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-Function.html#v:fix error prints *** Exception: 反复地、无限地。

答案是令人满意的。

我的思考

然而,我玩了一下ghci并意识到take 0 $ fix error预期回报"", and length $ take 0 $ fix error回报0.

另一方面,以下内容打印*** Exception: 无限流:

20 > (length $ take 10 $ fix error)

我明白那个if即使是其中的一种元素fix error被计算(实际上尝试),结果就是这样,但我的问题是:为什么首先需要对它们中的任何一个进行评估,在那个特定的表达中?毕竟,length $ take 10 $ whatever不能是其他<= 10, hence < 20,因此表达式应计算为True.

事实上,我看到了20 > (length $ take 10 $ [fix error])立即返回True。也许重点是take 10预计将致力于[a], 所以length $ take 10 $ [fix error]不需要评价fix error确保它正在工作[a]。确实,我已经验证过20 > (length $ take 10 $ undefined)也会出现错误(即使不是无限重复的错误),而20 > (length $ take 10 $ [undefined])返回与True.

也许就是这样威廉·范·翁塞姆在此评论中的意思是 https://stackoverflow.com/questions/72133599/what-is-fix-in-haskell-and-why-does-fix-error-print-an-infinite-string-and/72133643?noredirect=1#comment127469056_72133643.

无论如何,因为我可以将上面的表达式写为

((20 >) . length . take 10) $ fix error

我很想说

(20 >) . length . take 10 === const True

因此我认为这是合理的((20 >) . length . take 10) $ fix error回来True就像const True $ fix error回报True.

但事实并非如此。为什么?


take 10必须确定它的参数是否是[] or (:) value.

const True才不是。


length是严格的,因为它必须迭代整个论证。组合并不意味着它只需要迭代足够多的值就可以得到足够大的数字来伪造(20 >).

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

为什么不是 (20 >) 。长度 。取 10 === const True 的相关文章

  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • 在 Haskell 中为自定义数据类型创建 Read 类型类的实例

    我有一个自定义数据类型Foo Foo a Int b Int 我正在尝试使 Foo 成为 read 的自定义实例 我已经有一个功能了bar String gt Foo我尝试这样做 instance Read Foo a b where re
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 如何将函数转换为点自由形式?

    假设我有一个 JavaScript 函数 function f x return a b x c x 我如何将其转换为无点函数 通过组合函数 还有关于这方面的更多信息的资源吗 一般来说 当您将函数转变为无点风格时 没有简单的规则可遵循 要么
  • 使用 Haskell 的欧拉项目 #1

    import Data Set euler Int euler sum x x lt nums where nums Data Set toList Data Set union Data Set fromList 3 6 999 Data
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 如何在 Objective-C 中编写 lambda 方法?

    如何在 Objective C 中编写 lambda 方法 Objective C 中 lambda 的概念现在封装为Blocks http developer apple com mac library documentation Coc
  • 计算两点之间的距离(Haskell)

    给定两个元组的输入 我希望能够使用以下公式计算两点之间的距离 距离 sqrt x1 x2 2 y1 y2 2 所以我希望函数调用和输出如下所示 gt distance 5 10 3 5 5 385 当我尝试运行下面的代码时 它告诉我输入 w
  • 是否有一个基于对象身份的、线程安全的记忆库?

    我知道记忆化似乎是堆栈溢出的 haskell 标签上的一个长期话题 但我think以前没有人问过这个问题 我知道 Haskell 有几个不同的 现成 记忆库 memo combinators 和 memotrie 包 利用涉及惰性无限数据结
  • 什么是 ref 可以做但引用却不能做的事情?

    什么可以ref难道参考文献不能吗 可以 match value try thing Some ref e gt do stuff e 不能同等地表达为 match value try thing Some e gt do stuff e 编
  • 将 Either 列表转换为其中包含列表的 Either 列表

    我是 Haskell 的初学者 我正在编写一些使用 Haskell 的代码Either https hackage haskell org package base 4 9 0 0 docs Data Either html用于错误处理 E
  • 如何将只缓存某些内容的字段添加到ADT?

    我经常需要向 ADT 添加字段 仅记住一些冗余信息 但我还没有完全弄清楚如何又好又高效地做到这一点 说明问题的最好方法是举个例子 假设我们正在使用无类型 lambda 项 type VSym String data Lambda Var V
  • 我应该使用镜头中的什么来按索引构建只读吸气剂?

    我有一个内部细节被隐藏的类型 我想提供某种镜头 可以在特定索引处读取所述类型的元素 但是not修改它们 一个Ixed我的类型的实例似乎没有做我想要的事情 因为它明确允许修改 尽管不允许插入或删除 如果我想允许只读索引 我不确定我使用什么 如
  • 在 haskell 中处理 IO 与纯代码

    我正在编写一个shell脚本 我在haskell中的第一个非示例 它应该列出一个目录 获取每个文件大小 进行一些字符串操作 纯代码 然后重命名一些文件 我不确定我做错了什么 所以有两个问题 我应该如何安排这样的程序中的代码 我有一个具体问题
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 如何在不进行尾调用优化的情况下用函数式编程替代方案替换 while 循环?

    我正在 JavaScript 中尝试一种更实用的风格 因此 我用诸如map和reduce之类的实用函数替换了for循环 然而 我还没有找到 while 循环的功能替代品 因为尾部调用优化通常不适用于 JavaScript 据我了解 ES6
  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 什么是阴谋地狱?

    在阅读有关 阴谋地狱 的内容时 我有点困惑 因为这个词的含义太多了 我猜最初 Cabal Hell 指的是钻石依赖问题 该问题是通过限制构建计划在每个构建计划中只有任何包的单个版本来解决的 一个包的两个不同版本不能存在于单个构建计划中 正如
  • Haskell 中的类型化抽象语法和 DSL 设计

    我正在 Haskell 中设计 DSL 我想要进行赋值操作 像这样的东西 下面的代码只是为了在有限的上下文中解释我的问题 我没有类型检查 Stmt 类型 data Stmt forall a Assign String Exp a Assi
  • 如何在 F# 中执行 Seq.takeWhile + 一项

    我想编写一个使用谓词过滤序列的函数 但结果还应该包括谓词返回 false 的第一个项目 如果 F 中有一个break关键字 逻辑将是这样的 let myFilter predicate s seq for item in s do yiel

随机推荐

  • Xcode 5 中单元测试的使用

    我正在编写我的第一个更大的 iOS 项目 我想尽可能多地使用 Xcode 5 现在我想使用测试 但我以前从未这样做过 我的项目使用来Views和动态 TableViews 我怎样才能在代码中实现测试 使其有意义 请先观看 WWDC 13 会
  • 适合约 250,000 张图像的最佳 Web 文件夹结构

    我的网站将包含大约 200 000 张图像 每张图像将被存储 3 次 全尺寸 缩略图 更大缩略图 全尺寸图像约为 50Kb 至 500Kb 普通技术 VPS 上的 Linux Apache MySQL PHP 存储这些内容以便通过浏览器快速
  • 如何监视 JavaScript 中的递归函数

    Note 我已经看到这个问题以不同的方式提出并参考不同的测试工具 我认为清楚地描述问题和解决方案会很有用 我的测试是使用编写的诗乃间谍 https sinonjs org 为了可读性并将使用运行Jest https jestjs io en
  • 如何通过 TIdHTTP 下载大文件?

    我使用此代码下载小文件 Var ms TMemoryStream begin ms TMemoryStream Create Idhttp1 get http mydomain com myfile zip ms ms SaveToFile
  • 无法连接到 VS2012 中的 localDB –“建立与 SQL Server 的连接时发生网络相关或特定于实例的错误...”

    这很奇怪 因为我能够使用相同的连接字符串通过 SSMS 2008R2 连接到 localDB Data Source LocalDB v11 0 Integrated Security true Only C 代码无法连接 我尝试增加登录时
  • 创建流而无需从中创建物理文件

    我需要创建一个包含服务器上存在的文档的 zip 文件 我使用 Net Package 类来执行此操作 并创建一个新的 Package 即 zip 文件 我必须具有物理文件或流的路径 我试图不创建一个实际的 zip 文件 而是创建一个存在于内
  • makemessages 的 Unicode 问题 --all Django 1.6.2 Python 3.3

    升级项目Python 2 7 gt 3 3 1 and 姜戈1 4 gt 1 6 2 更新代码后我们的应用程序再次运行 in py3 翻译正在从 mo files 唯一的问题是我们的旧 po文件不能与 django admin py mak
  • 在 ASP.NET 5 中动态加载程序集

    我曾经有一些代码可以扫描bin我的应用程序的目录中包含尚未加载到 AppDomain 中并加载它们的程序集 它基本上看起来像 foreach var assemblyPath in Directory GetFiles path to bi
  • 根据字符串中多个单词的精确匹配转换新列

    我有一个数据框 df lt data frame Otherspp c suck SD BT SD RS RSS Dominantspp c OM OM RSS CH Commonspp c OM Rarespp c SD NP NP re
  • 什么是 print(f"...")

    我正在阅读一个 python 脚本 该脚本接受 XML 文件的输入并输出 XML 文件 但是 我不明白打印语法 有人可以解释一下吗f in print f does args parser parser args print f Input
  • 如何使用 Ruby CSV 转换器?

    假设您有以下文件 textfield datetimefield numfield foo 2008 07 01 17 50 55 004688 1 bar 2008 07 02 17 50 55 004688 2 读取 csv 的 Rub
  • 如何在 TCPDF 中设置下边距?

    我正在使用 TCPDF 生成 pdf 我可以使用设置左 上 右的边距SetMargins left top right 1 keepmargins false 但无法设置 pdf 页面底部的边距 任何人都可以帮助我在 TCPDF 中设置底部
  • Google Drive api 和服务帐户

    我为我的帐户创建了服务帐户 电子邮件受保护 cdn cgi l email protection 谷歌应用程序 和我的应用程序运行良好 然后我为我的个人帐户创建了服务帐户 电子邮件受保护 cdn cgi l email protection
  • 通过我们的应用程序使用“向朋友和家人汇款”功能

    我们的应用程序需要利用 向朋友和家人汇款 功能 现在我们可以使用 AdaptivePayments 执行个人支付 无需支付任何费用 如预期 但这种类型的交易似乎是购买交易 而不是 向家人和朋友汇款 交易 查看付款详细信息 而不是查看与 向朋
  • 如何用虚拟属性更新模型的属性?

    我有一个名为UserPrice其具有属性 purchase date a date select 在其表中 使用我的表单 我可以一次创建多个 user prices 但为了用户方便 我在我的表单中创建了一个虚拟属性UserPrice模型称为
  • 如果在 Woocommerce 中缺货(如果可变产品 - 如果所有变体都缺货),如何隐藏产品? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如果所有变体都缺货 我想隐藏某个产品 在 WooCommerce 中 如果您单击 隐藏目录中的库存商品 框 它会隐藏缺货的特定变体 当
  • 如何移植使用“${@:2}”?

    On 允许在变量赋值中使用 2 语法 https github com koalaman shellcheck issues 214他们说我不应该使用 2 因为它会破坏不同外壳的东西 我应该使用 2 反而 但使用 2 代替 2 是无稽之谈
  • 使用Google专利api

    我只是想使用 Python 和 Google 专利搜索 API 找出专利的所有者 import urllib2 import json url https ajax googleapis com ajax services search p
  • Namecheap 域名不会在没有“www”的情况下重定向

    我正在寻找将我的域连接到 heroku 应用程序 到目前为止 我读过的教程说我们希望 Namecheap 拥有以下域名记录example com CNAME Record www www example com herokudns com
  • 为什么不是 (20 >) 。长度 。取 10 === const True

    tl dr 事实难道不是这样吗20 lt length take 10 whatever需要whatever成功地对列表进行模式修补 至少 or 缺乏 懒惰 或者 换句话说 为什么不 20 gt length take 10 const T