首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SML和OCaml被认为是ML的方言?ML的定义是什么?

为什么SML和OCaml被认为是ML的方言?ML的定义是什么?
EN

Stack Overflow用户
提问于 2013-07-25 05:41:57
回答 1查看 1.4K关注 0票数 15

ML的方言很多,其中SML和OCaml是最流行的方言。SML和OCaml有许多不同之处,但它们都被认为是ML的方言。所以,

  1. 为什么SML和OCaml被认为是ML的方言?
  2. 一种语言如何被认为是ML的方言?
  3. 如果ML不是SML/OCaml,那么ML的定义是什么?

我猜ML是SML和OCaml的一些交集,但是我找不到一些详细的定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-27 17:37:19

camlspotter的链接很好地概述了ML历史,并提到了Luca的一个名为“Cardelli‘and”的实现。我四处打听,发现了一篇论文:Unix下毫升。Luca描述了" ML“的一个实现,我很肯定这会比标准ML早于1983年。这是摘要中的特性列表:

  • 互动式
  • 强类型
  • 多态型系统
  • 抽象数据类型
  • 例外情况
  • 模块

这是一个很好的列表,尽管有些部分似乎不清楚。我认为这个列表可以作为一种语言为了“被认为是一个ML”而应该具备的特性的非正式定义,但是有几件事情值得注意。

要求系统是“交互的”是一个有点挑剔的实现细节,也许具体到本文所描述的实现。标准ML编译器MLton没有交互式的REPL (因为它是一个完整的程序优化编译器),但是我怀疑是否有人认真地认为MLton实现的语言不是ML。

此外,“强类型”相当模糊,因此值得阅读该段的其余部分,以获得更多的上下文:

每个ML表达式都有一个类型,该类型是静态确定的。表达式的类型通常由系统自动推断,而不需要类型definitions。ML类型系统保证可以键入的任何表达式在运行时不会生成类型错误。静态排版陷阱在编译时,很大一部分错误在程序中.

这个列表也完全没有提到模式匹配,但是本文确实讨论了模式匹配,尽管我不知道在LCF中使用的ur-ML是否有模式匹配,如果没有模式匹配,我们将如何操作没有它的数据类型。我认为,在2013年,一种具有这些功能但缺乏模式匹配的语言将很难作为一种ML来销售。

注意,Haskell基本上符合这个列表,如果你稍微斜视一下的话。但在实践中,它有足够的分歧,我认为大多数人认为Haskell是受ML启发的,但“不是ML",主要是因为Haskell是纯洁和懒惰的,而ML在历史上一直是纯洁和严格的。此外,在SML和OCaml中的ML模块系统与Haskell有很大的不同,而且两者都没有类型分类。

这并不是对你所有问题的详尽回答,但我还是希望它能有所帮助。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17849883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档