函数
函数, 本地声明, 控制结构, 等等. CPN ML


 

这一面包括的内容有,声明函数的描述,本地声明,控制结构,等等.

 

函数 

声明语法 

fun id pat1 = exp1
  | id pat2 = exp2
  | ... 
  | id patn = expn;

  exp1, exp2, ..., expn 都是同一个类型的.

声明的例子 

下划线"_"用于省略模式中的域.请看下面的例子.这是一个含有两个参数(一个常数型,一个列表型)的函数,它的返回值就是将列表中的每一项与那个常数相乘.

fun listMult (c, x::xs) = (c * x)::listMult(c, xs)
  | listMult (_, nil) = nil

要将一个函数f(有两个参数)变为一个插入式的操作符,写成:

infix f;

声明例子Example declarations中,还讨论了两个有关于函数的例子.

本地声明 

let结构可以在函数定义中定义局部变量.此外,let也可以在代码段中使用.

语法 

let
   val pat1 = exp1
   val pat2 = exp2
   val patn = expn
in
   exp
end;

例子 

let
   val file_id = TextIO.openOut("/tmp/outputfile.txt")
   val theString = "The transition occurred again.\n"
   val _ = TextIO.output(file_id, theString)
in
   TextIO.closeOut(file_id)
end;

这个let声明可以在代码段中使用,在每一次相关的变迁触发时保存一个字符串到一个文件中.

控制结构 

有两种控制结构: if-then-elsecase.

语法 

if bool-exp then exp1 else exp2;

exp1exp2 类型要相同.

case exp of
     pat1 => exp1
   | pat2 => exp2
   | ...
   | patn => expn;

exp1, exp2, ..., expn 类型要相同.

例子 

if x<3
  then "x is less than three"
else "x is greater than or equal three"

这个表达式检查与x相关的值是否小于三,并且返回一个适当的字符串作为返回值.

if x=p
  then 1`e
else 2`e

这个表达式检查与x相关联的值是否与p相等.如果x等于p,就把多重集赋值为一个e,否则复制为两个e的实例.

case day of 
    Mon => "Today is Monday"
  | Tues => "Today is Tuesday"
  | Wed => "Today is Wednesday"
  | Thurs => "Today is Thursday"
  | Fri => "Today is Friday"
  | _ => "It is a weekend day"

这个表达式返回一个字符串,字符串的值取决于day的值.day是一个Day类型,一个枚举颜色集enumerated colour set的例子.最后一行中的下划线"_"意味着,当day的值不是Mon, Tues, Wed, Thurs, 或者 Fri中的任何一个时,表达式将返回字符串"It is a weekend day".也就是说,day的值为Sat或者Sun.