| 函数 | CPN Tools help |
| 函数, 本地声明, 控制结构, 等等. | 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-else 和 case.
if bool-exp then exp1 else exp2;
exp1 和 exp2 类型要相同.
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.