顶级环境比较

从SML/NJ 0.93到SML/NJ 110(SML'97)

本文档是需要端口代码的人员的快速参考从SML/NJ 0.93到SML/NJ110及更高版本,实现了97年新款SML标准依据.

对于那些想使用新的SML/NJ版本与教科书基于SML/NJ 0.93基础环境。

请将有关此文档的任何错误报告或问题发送给戴夫·麦奎因dbm@research.bell-labs.com。

内嵌(Infixes)

以下是SML/NJ 0.93的顶级中缀声明:

前中缀0中缀3 o:=中缀4=<=中缀5::@中缀6+-^中缀7*/div mod quot rem

SML’97是相同的,只是quot和rem不再是中缀,并且未在顶层绑定(使用Int.quot、Int.rem)。

超载

以下是0.93的过载运算符:

标记字符串:('a->string){Bool.makestring,Real.makestring,Integer.makestring}print:('a->unit){Bool.print、Integer.print、Real.print和String.print}~:('a->'a){整数~,实数~}+:('a*'a->'a){Integer.+,Real.+}-:('a*'a->'a){Integer.-,Real.-}*:('a*'a->'a){Integer.*,Real.*}<:('a*'a->bool){Integer.<,Real.<,String.<}>:('a*'a->bool){Integer.>,Real.>,String.>}<=:('a*'a->bool){Integer.<=,Real.<=、String.<=}>=:('a*'a->bool){Integer.>=、Real.>=,String.>=}abs:('a->'a){Integer.abs,Real.abs}

SML'97消除了makestring和print作为重载函数的功能。在顶部水平,

val print=文本IO打印:字符串->单位

重载的makestring被函数替换Bool.toString、Real.toString和Int.toString。

mod、div现在在int和各种单词类型上重载精度,和/或在real的各种精度上过载。这个其他算术和关系运算符在更多类型上重载(例如,各种大小的整数、单词、实数)。关系型运算符也在字符和字符串上重载,并且可能有多种字符(例如Ascii、,Unicode),具有相应的字符串种类。

模块更换

前基础结构

阵列布尔概述IO(输入输出)列表真实RealArray公司字符串矢量
SML'97中继续存在,但其签名已更改。这个裁判结构不再存在。功能:=现在可以在中找到概述,而类型裁判建造师裁判只在顶层绑定。这个以下以前的基础结构已被重命名或替换为表示,同样带有修改后的签名:
位=>字31ByteArray=>Word8Array整数=>整数IO=>文本IO,二进制IO
虽然SML’97中实际上有一个IO结构,但旧的IO结构对应于新的TextIO和BinIO结构。

顶级环境

SML/NJ 0.93在顶层打开了以下结构:

参考字符串IO布尔列表整数实数常规
然后,它添加重载绑定和infix绑定,以创建顶级环境。顶级环境还包括模块绑定,我们在本文档中忽略了这些绑定。

下表列出了SML/NJ 0.93顶层中的元素环境(不包括重载符号和中缀声明)它们在SML'97中的对应元素。SML/NJ 0.93顶级元素出现在第一列,分组在副标题下对应于SML/NJ 0.93中的主模块。第二列给出了SML’97(SML/NJ 110)基础的相应元素。当它也绑定在顶部时,它显示为一个简单标识符级别,如果与第一个级别中的类型不同,则由其类型进行注释列。如果相应的元素绑定在顶层,但从另一个结构来看,斜体的路径表示其原点结构。如果相应元素未在顶层定义,第二列包含完整路径(非斜体),再次添加注释如果类型不同,则按类型。

当第二列包含一个简单标识符时,表示它是绑定在SML'97(SML/NJ 110)的顶层,第三列给出了SML’97的主模块。

列2中的条目在列中没有对应条目一个是SML/NJ 0.93中没有的新顶级绑定。

SML/新泽西州0.93 97年SML(SML/NJ 110)
无结构
eqtype'参考 裁判
val参考:“_a->”_a参考 ref:“a->”参考
裁判
val!:'参考->“a 概述。
val:=:“a ref*”a->单元 概述。:=
val inc:int参考->单元 
val dec:int参考->单元 
  烧焦
  eqtype字符
字符串
eqtype字符串 一串
异常子字符串 概述。下标
异常Chr 概述。Chr公司
例外订单  
val长度:string->int 
val大小:string->int 大小
val子字符串:string*int*int->string 子串
val爆炸:字符串->字符串列表 分解:字符串->字符列表
val内爆:字符串列表->字符串 内爆:字符列表->字符串
  val concat:字符串列表->字符串
val^:字符串*string->字符串 ^
val chr:int->字符串 烧焦。chr:int->char
val ord:string->int 烧焦。ord:char->int
val ordof:字符串*int->int String.sub:String*int->char
  val str:char->字符串
IO(输入输出)
类型河道内 文本IO.instream
类型伸出 文本IO.outstream
字符串的异常Io
{name:string的IO.IO,函数:字符串,原因:exn}
val标准输入:指令流 文本IO.stdIn:文本IO.instream
val标准输出:扩展 TextIO.stdOut:文本IO.outstream
val std_err:扩展 TextIO.stdErr:文本IO.outstream
val open_in:string->指令流 TextIO.openIn:字符串->TextIO.instream
val open_out:string->扩展 TextIO.openOut:字符串->TextIO.outstream
val open_append:string->流出 TextIO.openAppend:string->TextIO.extream
val open_string:string->指令流 TextIO.openString:字符串->TextIO.instream
val close_in:instream->单元 TextIO.closeIn:TextIO.instream->单元
val close_out:超流->单元 TextIO.closeOut:TextIO.outstream->单元
val输出:outstream*string->unit TextIO.output:TextIO.extream*string->单元
val输出c:outstream->string->unit 
val输入:instream*int->string TextIO.inputN:TextIO.instream*int->字符串
val inputc:instream->int->string 
val input_line:instream->string TextIO.inputLine:TextIO.instream->string
val lookahead:instream->string TextIO.lookahead:TextIO.instream->char选项
val end_of_stream:指令流->bool TextIO.endOfStream:文本IO.instream->bool
val can_input:指令流->int TextIO.can输入:TextIO.instream*int->bool
val flush_out:上游->单元 TextIO.flushOut:TextIO.outstream->单元
val is _ term _ in:指令流->布尔 [注1]
val is_term_out:超流->布尔 [注2]
val set_term_in:指令流*bool->单元 
val set_term_out:流出*bool->单位 
val执行:(字符串*字符串列表)->河道内*河道外
Unix.execute(Unix.执行):string*string列表->Unix.proc[注3]
val执行_in_env:字符串*字符串列表*字符串列表->河道内*河道外
Unix.executeInEnv:字符串*字符串列表*字符串列表->统一程序
val导出ML:string->bool SMLofNJ.出口ML
val导出Fn:字符串*(字符串列表*字符串列表->单元)->单位
SMLofNJ.出口Fn:字符串*(string*string列表->OS.Process.status)->“a
  val值文本IO。打印:字符串->单位
布尔
数据类型bool=true|false
数据类型bool=true|false
数据类型“a option=NONE|SOME of”a
选项。选项选项。选项。一些
val-not:bool->bool
列表
datatype“列表=零|::of('a*'列表)
datatype“列表=零|::of('a*'列表)
  异常为空
异常Hd 清空
异常Tl 清空
异常N 概述。下标
异常NthTail 概述。下标
val hd:'一个列表->'一个 硬盘
val tl:“列表->”列表 热释光
val null:'列表->bool 无效
val-length:'列表->int 长度
val@:'a list*'列表->'列表 @
val rev:“列表->”列表 转速
val映射:('a->'b)->'a list->'b list 地图
瓦尔褶皱:('a*'b->'b)->'列表->'b->'b
文件夹:('a*'b->'b)->'b->“a列表->”b
val版本:('a*'b->'b)->'列表->'b->'b
文件夹:('a*'b->'b)->'b->“a列表->”b
val应用程序:('a->'b)->'列表->单元 app:('a->unit)->'列表->unit
val revapp:('a->'b)->'a列表->单位 
val nth:'列表*int->' 列表编号
val nthtail:“a list*int->”列表 列表.drop
val存在:('a->bool)->'列表->bool 列表.存在
整数国际
eqtype整数 整数
异常总和 概述。溢流
异常差异 概述。溢流
例外产品 概述。溢流
异常Neg 概述。溢流
例外报价 概述。Div公司
异常Abs 概述。溢流
异常Div 概述。Div公司
异常Mod 概述。Div公司
异常溢出 概述。溢流
val div:int*int->int div(过载:Int.div)
val mod:int*int->int mod(过载:Int.mod)
valquot:int*int->int 国际报价
val-rem:int*int->int 内部.rem
val最小值:int*int->int 国际单位:min
val最大值:int*int->int 国际最大值
真实
eqtype实数 键入real[不是eqtype!]
异常总和 概述。溢流
异常差异 概述。溢流
例外产品 概述。溢流
例外楼层 概述。溢流
异常Sqrt 概述。溢流
异常Exp 概述。溢流
异常Ln 概述。溢流
例外Div 概述。Div公司
异常溢出 概述。溢流
val/:(real*real)->real /(实际值/,…)
val实数:int->real 来自Int的实际值
val地板:实->整数 地板
val truncate:实->整数 特朗克
val上限:real->int 天花板
  val舍入:实数->整数
val-sqrt:real->real 数学.sqrt
val-sin:真实->真实 数学.sin
val cos:实->实 数学科
val arctan:实->实 数学、数学
val-exp:真实->真实 数学.exp
val ln:真实->真实 数学.ln
概述
键入“a cont SMLofNJ.cont公司
类型exn 类型exn
类型单位 类型单位
数据类型'a frag=字符串的QUOTE|“a”的ANTIQUOTE
SMLofNJ.frag公司新泽西州SML。报价新泽西州SML。反报价
 
数据类型顺序=小于|等于|大于
异常绑定 绑定
异常匹配 匹配
异常中断 
异常字符串失败 失败
  异常选项
  异常下标
  异常Chr
  异常Div
val用法:字符串->单位 use(=Compiler.Interact.useFile)
val调用cc:('_a cont->'_a)->'_a 新泽西州SML。Cont.callcc:('a Cont->'a)->'a
val throw:“a cont->”a->“b 新泽西州SML。Cont.throw(续)
值o:('b->'c)*('a->'b)->('a->'c) o个
val之前:('a*'b)->'a 之前:('a*单元)->'a
  val忽略:'a->unit
  val exn名称:exn->string
  val消息:exn->string
val=:'a*'a->bool=
val<>:'a*'a->bool<>
  选项
  datatype'a option=NONE|SOME of“a
  val getOpt:('a选项*'a)->'a
  valisSome:“一个选项->bool
  val valOf:“a选项->”a
  其他97年SML新元素
  eq类型单词。单词
  类型基板。子串
  eqtype“a阵列。阵列
  eqtype“a矢量。矢量
  val值矢量。vector:“a list->”向量

笔记

  1. is_term_in函数可以定义如下:
    fun is_term_in(instream:TextIO.instream)=let val(rd作为TextPrimIO.rd{ioDesc,…},buf)=文本IO。StreamIO.getReader(TextIO.getInstream指令流)在TextIO.setInstream中(instream,TextIO.StreamIO.mkInstream(rd,SOME buf));案例ioDesc无=>假|SOME desc=>(OS.IO.kind desc=OS.IO.Cind.tty)结束
  2. is_term_out函数可以定义如下:
    fun is_term_out(outstream:TextIO.outstream)=let val(wr作为TextPrimIO.wr{ioDesc,…},buf)=文本IO。StreamIO.getWriter(TextIO.getOutstream扩展)在TextIO.setOutstream中(outstream,TextIO.StreamIO.mkOutstrea姆(wr,buf));案例ioDesc无=>假|SOME desc=>(OS.IO.kind desc=OS.IO.Cind.tty)结束