📜  什么是标准元语言 (SML)?

📅  最后修改于: 2021-10-19 08:37:49             🧑  作者: Mango

标准元语言 (SML)是一种类型安全的编程语言,它封装了编程语言计划或设计中的众多创新思想。它是一种静态组合语言,具有可扩展的类型框架。它支持多态类型推断,从而消除了指定变量类型的负担并极大地鼓励了代码重用。它为数据结构和功能提供了高效的编程能力。它是一种通用的、特殊的、具有编译类型检查和类型推断的函数式编程语言。它是编译器学者和编程语言分析师的主流,以及证明定理的改进。它是 ML 的高级版本,ML是可计算函数逻辑 (LCF)假设演示项目中使用的编程语言。它在具有适当规范的常用语言中是特别的,如 1997 年完全开发的类型规则和操作语义。

SML 的基本要素

1. 表达式:表达式使用操作数和运算符来表示。在这种情况下,表达式的计算需要中表达式。
示例

- 10 + 20
val it = 30 : int

2. 变量:在这里,可以使用val 关键字来定义变量。
示例

- val a = 2;
- val b = 3;
- val c = a + b;
val c = 5 : int

3.打印:打印命令用于以SML显示输出。
示例

- print ("Hello this is my first program in SML ");
Hello this is my first program in SML val it = () : unit

4. 条件语句:可以使用 if-else 关键字指定条件。
示例

- if 10 > 20 then print ("Yes") else print ("No");
No val it = () : unit

5. 函数或过程:运算符fun用于定义函数。
示例

- fun fact 0 = 1

6. 递归:递归是一种方法,其中函数在参数内调用自身,并在达到终止条件时控制返回到调用函数。递归函数必须具有两个属性:

  1. 基本标准:必须至少有一个基本标准或条件,当满足此条件时,函数停止递归调用自身。
  2. 渐进式方法:递归调用应该以每次进行递归调用时都更接近基本标准的方式进行。许多编程语言使用堆栈数据结构实现递归。

用 SML 开发的阶乘程序中的递归示例

递归程序

7、SML中的List操作和List处理: List表示为:

示例

- [10, 20, 30, 40];
val it = [10, 20, 30, 40] : int list

例子

示例#1:求列表中所有元素的总和。

列表所有元素的总和

示例#2:查找列表中所有元素的乘积。

列表所有元素的乘积

示例#3:在不使用 length 关键字的情况下查找列表的长度。

列表长度

SML的优势

  1. 它具有高级设计模式。它的布局通过自动化和抑制许多低级信息(例如数据形成和资源控制)使编程更加高效和可靠。
  2. 它提供了连贯性和清晰度,即将函数视为一流属性的能力,使用高阶函数来演示广泛的系统组件,使用匹配模式进行精确的统计分析以及不可或缺的结构的可访问性提供在可预测且清晰的理论框架内进行出色的声明式编程。
  3. 它提供安全性和弹性,有助于变量类型检查,识别许多编译时错误。错误检测是通过使用模式识别来增强的,模式识别旨在保持对所有情况的保护,因为编译器可以静态地识别和删除未完成的匹配,以及通过异常方法,它提供了一种类型安全、勤奋的处理预期运行时的方法例外。
  4. 它提供模块化。 ML 模块是基本框架的内生子集。它提供了接口分离的要求和执行,并促进了抽象和参数化。这些服务在构建大型程序和识别通用、可重用软件的元素方面非常有效。

SML的缺点

  1. SML 的主要缺点是它受到“碎片化”的影响,即一些特定的活动,例如生成随机数、排序(列表或数组)或某种形式的关联序列,它缺乏功能和数据结构。
  2. 它的实现很弱。如果有一个真正强大的设计,数字图书馆的弊端就可以解决。
  3. 在脚本真正成熟之前,它很早就被开发或标准化了。最初的 ML 标准遗漏了许多可用的数据库,并且该模型有一些噩梦,例如低形式变量。因此,使用OcamlHaskell对人类来说变得更好了。