SML被用于什么?

20

SML在实际应用中有哪些用途?

它的实际用途是否与Prolog类似?

7个回答

27

在工作中,我们把SML用于实际的软件产品,并将其交付给付费客户。我们使用MLton将SML代码编译成原生代码,可以在Windows、Linux、Solaris、AIX和HP-UX上运行。它表现良好,我们对选择很满意。

我认为SML没有特别适合的明确领域。事实上,SML是一种非常全面的通用编程语言。Prolog在逻辑编程/人工智能/基于规则系统解决方案的领域已经很成熟了,但除了这些传统领域外还被用于许多其他领域

对于任何考虑在“现实世界”中使用SML进行软件项目的人,以下是我们到目前为止注意到的一些优缺点:

  • SML是一种非常好的通用编程语言,特别是模块系统非常棒
  • MLton优化得非常好,可以自由地使用抽象而不会损失性能
  • 我们的旧代码是用C语言编写的。我们可以逐步用SML替换掉那些代码,并将C和SML代码链接到同一个可执行文件中。
  • SML/NJ提供了用于快速开发的REPL
  • 适用于我们所有的平台

缺点:

  • 用户基数很小
  • 支持工具方面比较欠缺(IDE、代码文档、调试器等)
  • 我得亲自将MLton移植到AIX和HP-UX才行

6

机器学习(ML)与Prolog不是直接可比较的。Prolog是一种声明性逻辑编程语言,基本上是使用Horn子句的定理证明器。非纯Prolog的一个好特点是它允许您在编译或运行时严重修改程序。例如,在大多数现代Prolog实现中,您可以直接使用DCG(确定性子句语法)形式编写语法。使用“-->”运算符的语法规则将使用术语扩展重写为Prolog子句。例如:

a(N) --> b, c(N).

会被重写为:

a(N,P0,P2) :- b(P0,P1), c(N,P1,P2).

使用位置变量可以强制箭头右侧的子句相邻。由于Prolog会试图通过回溯证明子句的头部,因此你基本上拥有了一个自顶向下的从左到右的解析器,而无需进行任何额外的工作。程序修改的另一个例子是(动态)事实或子句的断言或撤销,这可用于在运行时修改程序的行为。
另一方面,ML是一种不纯的函数式语言。Prolog和ML之间的联系在于,一些定理证明器是用ML编写的。我认为ML更加通用,但对于其专业领域,Prolog非常方便。两者都非常有用,即使只是为了扩大视野。

3

SML被编译器编写者使用。Prolog和SML都被用于定理证明器。


2

FoxNet项目是卡内基梅隆大学使用SML构建的。

Jane Street专有交易公司使用O'Caml构建他们自己的内部软件。

《ML for the Working Programmer》的作者Laurance C. Paulson使用SML构建了LCF定理证明器Isabell。

Haskell专家和教授Philip Wadler维护着一个使用函数式编程的真实项目列表,其中包括使用ML的项目,位于http://homepages.inf.ed.ac.uk/wadler/realworld/


1

我个人只在大学的数论课程中使用过它。

我必须说我非常喜欢使用它。当处理密码学时,它可以处理巨大的数字,这非常好。

如果有关系的话,我是使用莫斯科ML http://www.itu.dk/people/sestoft/mosml.html


1
我还没有看到许多商业应用的机器学习,但这可能是由于可用环境的限制,而不是语言本身的问题。我见过一些银行使用 F#(与 ML 同属一系列)来处理数据流、进行矩阵代数和寻找模式。显然,微软将其打包为 .NET 对其有很大帮助。

1

虽然不是SML,但与之密切相关的是OCAML,它已被用于许多事情:

http://caml.inria.fr/about/successes.en.html

我相当喜欢“西方的快速傅里叶变换”,其中使用机器学习来生成优化的C代码...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接