标准ML(SML)学习资源、使用与语法详解
立即解锁
发布时间: 2025-08-18 00:31:31 阅读量: 2 订阅数: 3 

# 标准ML(SML)学习资源、使用与语法详解
## 1. 学习资源推荐
在学习标准ML(SML)的过程中,有不少优秀的资料可供参考:
| 作者 | 书籍名称 | 特点 |
| ---- | ---- | ---- |
| R.Bosworth | A practical course in functional programming using Standard ML | 提供两个中等规模的案例研究,但没有关于抽象类型或结构的内容 |
| R.Harrison | Abstract data types in Standard ML | 假定有一定函数式编程知识,详细介绍了在开发通用抽象数据类型时抽象类型和结构的使用 |
| J.D.Ullman | Elements of ML Programming | 适合将SML作为第二语言学习,涵盖SML的所有内容 |
| R.Stansifer | ML primer | 适合将SML作为第二语言学习,内容相对简洁,包含实用示例 |
| L.C.Paulson | ML for the working programmer | 较为高级的教材,全面覆盖SML,还包含程序证明、α演算解释器和战术定理证明器的SML实现相关内容 |
| S.Sokolowski | Applicative high order programming: the Standard ML perspective | 专注于高阶函数的使用,包含程序证明、多态性和通过编译为抽象栈机代码实现函数式语言的内容 |
| C.Reade | Elements of functional programming | 涵盖广泛的实用和理论函数式编程主题,介绍SML后,还有关于惰性求值、语义、多态类型检查、λ演算和组合子以及通过SECD机器实现函数式语言的内容 |
## 2. SML实现获取
Usenet新闻组comp.lang.ml是讨论SML的活跃论坛,每月会发布“Standard ML Frequently Asked Questions”,其中包含获取SML实现的详细信息,也可通过匿名ftp从`pop.cs.cmu.edu:/usr/rowan/sml-archive/faq.txt`获取。以下是一些免费的SML实现及其获取方式:
| 实现名称 | 开发方 | 运行系统 | 获取方式(匿名ftp) |
| ---- | ---- | ---- | ---- |
| Standard ML of New Jersey (NJSML) | AT&T Bell Laboratories和Princeton University | 许多基于UNIX的系统 | ftp.research.att.com:/dist/ml |
| MicroML | 于默奥大学 | IBM PC兼容系统 | ftp.cs.umu.se:/pub/um1exe01.uue |
| Moscow ML | 莫斯科Keldysh应用数学研究所和丹麦皇家兽医与农业大学 | IBM PC兼容系统 | ftp.dina.kvl.dk:/pub/mosml |
## 3. 使用SML系统
### 3.1 入门准备
要积极使用SML系统,需要具备以下条件:
- 能够使用编辑器将文本输入到文本文件中。
- 知道如何运行SML系统。
在UNIX和DOS系统中,假设UNIX提示符为`$`,DOS提示符为`C>`,SML系统命令为`sml`,但实际使用的系统可能有不同的命令和提示符。在基于Windows的系统中,可以在UNIX shell窗口或DOS窗口中运行SML。
### 3.2 开始使用
SML系统是交互式的,启动系统的命令如下:
- UNIX系统:`$ sml`
- DOS系统:`C> sml`
启动后,系统会打印一些启动信息,然后以`−`提示从键盘输入。输入表达式后要加上分号,例如:`– expression ;`。如果表达式跨多行,每行按“Enter”,系统会以`=`提示输入下一行,最后不要忘记加上分号。系统执行表达式后,会显示结果,这里假设显示形式为`> value : type`,其他SML系统可能显示为`val it = value : type`,`it`总是设置为表达式执行时找到的最后一个值。
### 3.3 退出系统
通常可以使用底层系统的退出中断代码退出SML系统,如Control-Z或Control-D,需根据具体使用的系统进行确认。例如,假设使用Control-Z:
- UNIX系统:
```
– ^Z
$
```
- DOS系统:
```
– ^Z
C>
```
### 3.4 紧急停止
如果需要停止正在运行的SML程序并返回输入提示符,可以使用Control-C:
```
….
^C
Execution terminated
–
```
### 3.5 程序开发
由于许多SML系统不允许修改已输入的内容,建议先将想尝试的内容输入到文本文件中,每个表达式后加上分号。给包含SML代码的文件添加`.sml`后缀是个有用的约定,但不是SML系统的要求。假设文件名为`file`,启动SML系统后输入`− use "file" ;`来读取文件内容,注意文件名要用双引号括起来。例如,如果文件名为`test.sml`,则输入`− use “test.sml”;`。读取文件后,系统会继续提示从键盘输入。如果有错误,需要退出SML系统,编辑文件,重新进入SML系统并再次读取文件。
- 在UNIX系统中,可以使用Control-X或Control-Z等控制序列暂停SML系统,编辑文件后,通常输入`fg`将暂停的进程恢复到前台。例如:
```
– ^X
Stopped
$
$ fg
(sml)
```
- 在基于Windows的系统中,可以使用一个窗口运行SML系统,另一个窗口编辑文件。先将SML代码输入到文件中,保存但不关闭文件,然后将文件内容读取到SML系统中。如果发现文件中有错误,可以切换到编辑窗口修改并保存文件,再切换到SML窗口重新读取文件,无需停止SML系统。
### 3.6 保存系统输出
如果想将SML会话的结果保存到文件中,可以在DOS或UNIX系统中使用文件重定向。例如,要将`test.sml`文件的运行结果保存到`results`文件中,可以使用以下命令:
- DOS系统:`C> sml < test.sml > results`
- UNIX系统:`$ sml < test.sml > results`
## 4. SML语法
### 4.1 程序结构
一个程序由一个或多个声明和表达式组成,它们用分号分隔。声明可以是名称/值关联、值绑定、函数、函数绑定、类型同义词、类型绑定、数据类型、数据类型绑定、异常、异常绑定或局部声明。
### 4.2 模式
-
0
0
复制全文