什么是SML用于?

时间:2009-04-07 08:01:47

标签: prolog sml dcg

真实单词中SML的用途是什么?

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

7 个答案:

答案 0 :(得分:25)

在工作中,我们在实际的现实软件产品中使用SML,并将其发送给付费客户。我们使用MLton将我们的SML代码编译为在Windows,Linux,Solaris,AIX和HP-UX上运行的本机代码。它运作良好,我们对我们的选择感到满意。

我不认为SML特别适合任何明确的利基市场。实际上,SML是一种非常全面的通用编程语言。 Prolog在逻辑编程/人工智能/基于规则的系统中已经建立了很好的解决方案,但it's used for a lot of things除了这些传统领域之外。

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

  • SML是一种非常好的通用编程语言,尤其是模块系统摇滚
  • MLton优化得非常好,您可以自由使用抽象而不会失去性能
  • 我们的旧代码是用简单的C编写的。我们可以用SML逐个替换它,将C和SML代码链接到相同的执行程序。
  • SML/NJ提供快速开发的repl
  • 适用于所有平台

缺点:

  • 微不足道的用户群
  • 缺少支持工具区域(IDE,代码文档,调试器等)
  • 我必须将MLton自己移植到AIX和HP-UX

答案 1 :(得分:6)

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

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

将被改写为:

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

位置变量的使用强制了箭头右侧的女儿的邻接。由于Prolog将通过证明其女儿(通过回溯)来试图证明一个条款的头部,所以你基本上有一个自上而下的左右解析器而没有任何额外的工作。程序修改的另一个例子是(动态)事实或子句的断言或撤销,可用于在运行时修改程序的行为。

另一方面,ML是一种不纯的函数式语言。 Prolog和ML之间的联系是一些定理证明用ML编写。我认为ML更具通用性,但对于它的利基Prolog是非常方便的。两者都非常有用,即使只是为了扩大你的视野。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

Carnegie Mellon Univ的FoxNet project是使用SML构建的。

Jane Street自营贸易公司,将O'Caml用于他们自己的内部构建软件。

工作程序员ML的作者Laurance C. Paulson使用SML构建了一个LCF定理证明者Isabell。

教授和Haskell专家Philip Wadler维护了一个使用功能编程的现实世界项目列表,其中包括使用ML的项目,位于 http://homepages.inf.ed.ac.uk/wadler/realworld/

答案 4 :(得分:1)

我只是亲自在大学里用它来进行数论理论课程。 我不得不说我非常喜欢使用它。它可以处理大量数据,这在处理密码术时很不错。

如果重要我正在使用莫斯科ML http://www.itu.dk/people/sestoft/mosml.html

答案 5 :(得分:1)

我还没有看到很多ML的商业应用,但这可能取决于可用的环境,而不是对语言的反思。我见过许多银行使用F#(与ML是同一个系列)来处理数据流,做矩阵代数并寻找模式。微软已经为.NET打包它的事实显然无济于事。

答案 6 :(得分:1)

不是SML,而是密切相关的是OCAML,它已被用于许多方面:

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

我更喜欢“西方更快的傅立叶变换”,其中ML用于生成优化的C ...