SML在真实单词中的用途是什么?
它的实际用途是否类似于Prolog?
在工作中,我们在实际的现实软件产品中使用SML,并将其发送给付费客户.我们使用MLton将我们的SML代码编译为在Windows,Linux,Solaris,AIX和HP-UX上运行的本机代码.它运作良好,我们对我们的选择感到满意.
我不认为SML特别适合任何明确的利基市场.实际上,SML是一种非常全面的通用编程语言.Prolog在逻辑编程/人工智能/基于规则的系统中已经建立了很好的解决方案,但它被用于除了这些传统领域之外的很多东西.
对于正在考虑在"现实世界"中使用SML进行软件项目的任何人来说,以下是我们迄今为止注意到的一些优点和缺点:
SML是一种非常好的通用编程语言,尤其是模块系统
MLton优化得非常好,您可以自由使用抽象而不会失去性能
我们的旧代码是用简单的C编写的.我们可以用SML逐个替换它,将C和SML代码链接到相同的执行程序.
SML/NJ为快速开发提供了一个代表
适用于我们所有平台
缺点:
微不足道的用户群
缺乏支持工具领域(IDE,代码文档,调试器等)
我不得不将MLton自己移植到AIX和HP-UX
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是非常方便的.两者都非常有用,甚至只是为了扩大你的视野.