什么是欣德利米尔纳?

2024-05-11

我遇到过这个词欣德利-米尔纳,我不确定是否理解它的意思。

我已阅读以下帖子:

  • 史蒂夫·叶格 -动态语言的反击 http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html
  • 史蒂夫·叶格 -匹诺曹问题 http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html
  • 丹尼尔·斯皮瓦克 -什么是欣德利米尔纳? (为什么它很酷?) https://web.archive.org/web/20181118000004/http://www.codecommit.com/blog/scala/what-is-hindley-milner-and-why-is-it-cool

But there is no single entry for this term in wikipedia where usually offers me a concise explanation.
Note - one has now been added http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner

它是什么?
什么语言和工具实现或使用它?
您能给出一个简洁的答案吗?


欣德利-米尔纳是类型系统由 Roger Hindley(研究逻辑)独立发现,后来由 Robin Milner(研究编程语言)独立发现。 Hindley-Milner 的优点是

  • 它支持多态性功能;例如,一个函数可以为您提供与元素类型无关的列表长度,或者一个函数可以执行与树中存储的键类型无关的二叉树查找。

  • 有时一个函数或值可以有不止一种类型,如长度函数的示例:它可以是“整数列表到整数”、“字符串列表到整数”、“对列表到整数”等等。在这种情况下,Hindley-Milner 系统的一个显着优势是每个类型正确的术语都有一个独特的“最佳”类型,这被称为主要类型。列表长度函数的主要类型是“对于任何a,来自列表的函数a到整数”。这里a是所谓的“类型参数”,即lambda 演算中的显式 but 大多数编程语言中隐含的。类型参数的使用解释了为什么 Hindley-Milner 是一个实现参数多态性。 (如果你用 ML 编写长度函数的定义,你可以这样看到类型参数:

     fun 'a length []      = 0
       | 'a length (x::xs) = 1 + length xs
    
  • If一个项具有 Hindley-Milner 类型,那么无需任何类型声明即可推断主体类型或程序员的其他注释。 (这是一个好坏参半的事情,因为任何人都可以证明谁曾经处理过大量没有注释的机器学习代码。)

Hindley-Milner 是几乎所有静态类型函数语言的类型系统的基础。常用的此类语言包括

  • ML家族(标准机器学习 http://en.wikipedia.org/wiki/Standard_ML and 客观凸轮 http://caml.inria.fr/)
  • Haskell http://www.haskell.org
  • Clean http://clean.cs.ru.nl/

所有这些语言都扩展了 Hindley-Milner; Haskell、Clean 和 Objective Caml 以雄心勃勃且不寻常的方式做到了这一点。 (需要扩展来处理可变变量,因为基本的 Hindley-Milner 可以使用例如保存未指定类型的值列表的可变单元格来破坏。此类问题可以通过称为值限制 http://users.cs.fiu.edu/~smithg/cop4555/valrestr.html.)

许多其他小语言和基于类型化函数语言的工具都使用 Hindley-Milner。

Hindley-Milner 是一个限制System F http://en.wikipedia.org/wiki/System_F,它允许更多类型,但是需要程序员注释.

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

什么是欣德利米尔纳? 的相关文章

  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • 在同一迭代中过滤和映射

    我有一个简单的情况 我想过滤并映射到相同的值 如下所示 const files results filter function r return r file map function r return r file 为了节省代码行并提高性
  • 在 scala 中混合类型参数和抽象类型

    我正在尝试使用的答案前面的问题 https stackoverflow com questions 2059601 circular type parameters definition in scala实现一个小型图形库 这个想法是将图视
  • 带参数的 Python 列表过滤

    python中有没有一种方法可以在列表上调用过滤器 其中过滤函数在调用期间绑定了许多参数 例如有没有办法做这样的事情 gt gt def foo a b c return a lt b and b lt c gt gt myList 1 2
  • lxml 的类型提示?

    Python 新手 具有静态类型语言背景 我想要类型提示https lxml de https lxml de只是为了便于开发 mypy 标记问题并建议方法会很好 据我所知 这是一个 python 2 0 模块 没有类型 目前我用过http
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri
  • 根据类的类型参数在方法中使用 Poly1 映射到 HList

    我有类 参数化为HList和其他一些类型 我该如何使用map on HList在其方法之一中 编译此代码会抛出java lang AssertionError class Test L lt HList P l L p P type Con
  • 使用新的定义文件添加到现有库打字稿类型

    我正在使用这个库https github com chentsulin koa bearer token https github com chentsulin koa bearer token它向 koa 库请求对象添加了一个额外的属性
  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • 如何在 TS 中使用泛型谓词

    我想使用数组过滤谓词函数 e g const isNotEmptyName
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 我可以让 C 函数返回任意类型吗?

    我编写了一个解释串行数据 CAN 的函数 当前返回一个浮点数 我希望该函数包含一个参数 其中用户在字符串中指定返回类型 并且该函数返回该类型的值 这只是一个方便的事情 以避免编写共享几乎所有相同代码的多个函数 将 void 指针传递给您想要
  • 是否可以在 .NET 中编写仅接受数字类型的通用函数?

    假设我想编写一个如下所示的函数 像往常一样 一个简单的示例用于说明目的 Public Function calcSqSum Of T ByVal list As IEnumerable Of T As T Dim sumSq As T Fo
  • 通过命令行参数选择要使用的 ocaml 模块

    在我的代码中我有module M Implementation1然后我参考M 代替Implementation1 问题是 我必须重新编译我的程序才能改变Implementation1 to Implementation2 我想通过命令行参数
  • 为什么使用非十进制数据类型不划算?

    tl dr 我的怎么了Cur 货币 结构 tl dr 2 在给出示例之前 请先阅读问题的其余部分float or double 我知道这个问题在互联网上已经出现过很多次了 但是我还没有看到令人信服的答案 所以我想我会再问一次 我无法理解为什
  • 如何使用可以是多种类型的变量?

    我经常使用以下方法将对象链接到其父对象 Video parent 有时我的对象可以是不同对象类型的子对象 我也是如此 int parentType Video parentVideo if parent VIDEO then this wi
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se
  • 用于语义网的 Python 工具/库:最先进的技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目前 Python 最好的 或多或少成熟 支持更高级的逻辑 具有可接受的性能 在一定程度上可扩展 开源
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者

随机推荐

  • 在 Play 中将电子邮件模板作为 scala 模板?

    在游戏 1 2 4 中 您可以使用标准模板机制和语法发送复杂的动态电子邮件 link http www playframework org documentation 1 2 4 emails 虽然我没用过 但看起来真的很酷 是个邮件插件
  • 展开 std::reference_wrapper 的成本

    Given include
  • 构建链代码时 ltdl.h 未找到错误

    我正在尝试使用构建链码go build 当我运行 Go build 命令时它的报告 hyperledger fabric vendor github com miekg pkcs11 pkcs11 g o 29 18 fatal error
  • 是否可以在一次 git 调用中取消设置多个 git 配置值,而不是逐一取消设置?

    我需要自动取消全局 git 配置文件中的许多别名 diff difftool merge mergetool 设置 现在我正在打电话git config global unset对于他们每个人来说 这有点慢 嗯 相对而言 大约需要 3 秒
  • 确定 R 中的组是否重复某个值

    我有一个包含许多列和行的数据 我想通过创建新的逻辑变量来确定某个组的值是否重复 相同 所以我的数据如下所示 v0 lt c 1 2 3 4 5 6 7 8 9 v1 lt c a b a c e c b b e v2 lt c R NA R
  • Yii2 Composer 管理 Bower 和 Bower-vendor 中的包

    我已经使用 yii2 一段时间了 但我不知道如何管理我的包 在这方面我有两个问题 当我将包添加到 yii2 时 它会在vendor bower bower assets 中下载 当 yii2 发布包时 它会在vendor bower下查找资
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • MySQL-分割字符串

    我的问题与这篇文章类似 MySQL 中的 反向 GROUP CONCAT https stackoverflow com questions 17308669 reverse group concat in mysql 然而 而不是反转gr
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 为什么代码分析不警告 NotImplementedException?

    我非常确定 Visual Studio Code Analysis 的早期版本会警告有关 NotImplementedException 的使用 即包含此异常的任何成员 throw new NotImplementedException 会
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • Java:将秒转换为分钟、小时和天[重复]

    这个问题在这里已经有答案了 任务是 输出应如下所示 最好回显输入 您输入了 500 000 秒 即 5 天 18 小时 53 分钟 20 秒 5天18 53 20小时 我该怎么做呢 最容易理解和做到的方法是什么 讲师还说 没有硬编码 我不太
  • IE9支持CSS线性渐变吗?

    有了 Chrome Safari 和 Firefox webkit gradient and moz linear gradient特性 我怎样才能用 IE9 做同样的事情呢 最好的跨浏览器解决方案是 background fff back
  • SSHKit::Runner::ExecuteError:以 root@co 身份执行时出现异常:Jenkins Job 的 shell 脚本中的用户 root@ 身份验证失败

    我正在尝试从 Jenkins Job 运行 cap 部署命令 它不断抛出以下错误 我也在部署服务器中添加了 ssh 密钥 我能够从配置 Jenkins 的服务器成功部署 但是当我运行该作业时 会引发身份验证错误 这对我来说真的很重要 有人可
  • 猫头鹰轮播,制作自定义导航

    所以我有一个包含三张图像的猫头鹰旋转木马 我还在左侧和右侧添加了自定义导航箭头 png 图像 然而 这些箭头目前是无用的 因为我找不到一种方法来真正让它们在我的猫头鹰旋转木马的图像之间切换 我无休止地寻找 找不到解决方案 有任何想法吗 您需
  • 如何在notepad++中格式化JSON

    我想在记事本 中格式化JSON字符串 请指导我该怎么做 我研究了这个解决方案记事本 JSON 格式 https stackoverflow com questions 1560464 how to reformat json in note
  • 如何制作 SagePay BuyNow 按钮?

    通过 PayPal 我可以非常轻松地创建一个 BuyNow 按钮 其中包含我的商家信息 价格 税金 运费等 这在 SagePay 中可行吗 所需的系统称为 SagePay Form 与 PayPal 的 BuyNow 按钮 PDT 流程相似
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 什么是欣德利米尔纳?

    我遇到过这个词欣德利 米尔纳 我不确定是否理解它的意思 我已阅读以下帖子 史蒂夫 叶格 动态语言的反击 http steve yegge blogspot com 2008 05 dynamic languages strike back