为什么不是 (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 的相关文章

随机推荐

  • 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