1.2. 核心语言

1.2.1. 使用重新绑定构造函数名称val记录乐趣

在SML'90中,数据构造函数名称只能在其范围内反弹通过使用该名称的另一个数据类型声明。在SML'97中,数据构造函数名称也可以通过递归函数声明反弹(val记录乐趣).参见SML’97定义,第24页,规则(26)。例如:
数据类型t=f;fun f x=x;
SML/NJ差异。此更改尚未完成在SML/NJ实施。这是错误1357。

1.2.2. 修订的中缀运算符优先级规则

中缀操作员的交互方式现在符合SML/NJ的处理方式始终执行(SML’97定义,第6页第2.6节)。如果身份证件1身份证件2是左(右)联合中缀具有相同优先级的运算符,然后是形式的表达式
  aexp id1aexp id2aexp公司
(其中aexp公司代表原子表达式)关联到左侧(右侧)。如果身份证件1身份证件2具有相同的优先级,但不同的关联性(即一个是左关联的,另一个是右关联),则SML’97定义表示表达式非法。SML/NJ更宽容,只发布警告,并通过与左侧关联来打破平局。
-中缀4<<;中缀4<<-infixr 4>>;infixr 4>>-fun(x>>y)=“正确”;val>>=fn:'a*'b->字符串-fun(x<<y)=“左”;val<<=fn:'a*'b->string- 1 << 2 >> 3;stdIn:21.8-21.10警告:混合了具有相同优先级的左关联运算符和右关联运算符valit=“right”:字符串- 1 >> 2 << 3;stdIn:22.8-2.10警告:混合了具有相同优先级的左关联运算符和右关联运算符valit=“left”:字符串

1.2.3. 禁止重新绑定

确保语义中的某些派生形式扩展(例如,如果表达式转换为case表达式)是健壮的,SML97年禁止重新绑定真的,,,::,裁判.也禁止捆绑作为数据构造函数或异常构造函数。这些限制主要是为了语义,因为大多数实现不会因重新绑定而中断这些标识符。然而,最好不要重发这些无论如何,密钥标识符,因为这样做可能会导致混淆。
SML/NJ差异:SML/NJ目前未实施这一限制。这是错误1328。

戴夫·麦奎因
上次修改时间:美国东部时间1998年3月5日星期四14:25:32