SML(standard ML)入门学习(1)

采自《ML程序设计教程》

一、名字和函数

首先可以输入:

2+2;

ML回应:

> 4 : int

注意整数(int)和实数(real)不能在同一个表达式里出现。可以将整数加小数点解决(2-->2.0)。

1.命名常量

值的声名是以关键字val开始,以分号结束。

先用名字seconds命名60。

val seconds = 60;

val minutes = 60;

val hours = 24;

seconds*minutes*hours;

输出:

> 86400 : int

ML会把求得的值存入it。可以引用it。

it div 24;

> 3600 : int

名字里可以包含下划线。

2.声名函数

计算圆面积函数:

fun area (r) = 3.14*r*r;

函数声明以fun开始,area是函数的名字,r是形式参数,3.14*r*r是函数体。

函数在ML里也是值,ML也打印出值和类型:

> val area = fn : real -> real

area(2.0);

> 12.56 : real

下面的函数声名与之前的等价:

fun area r = 3.14*r*r;

3.Standard ML中的标识符

字母名字以字母开始,后可以跟随字母、数字、下划线和撇号。符号名字可由~!@#$%^&*+-:<=>?\'|组成。名字可以任意长。

4.算术运算

整数:一串数字,可由负号(~)开始。整数运算包含+、-、*、div和mod。遵循常规的优先级规则。

实数:可以使用E记法。如7E~2表示0.07。负的指数部分由一元减号(~)开始。

类型约束:额,我也不清楚。

fun square x = x*x;

ML不能确定这个函数是给整数还是给实数用的,默认为int。可以改为:

fun square (x : real) = x*x;

fun square x : real = x*x;

fun square x = x*x : real;

不论用哪种声名方式,类型约束都是必须的。

标准库:结构Int包含abs、min、max和sign等。Real也包含。调用real可以把int转换为real。调用round将实数转换为值最接近的整数,还有floor,ceil和trunc。结构Math包含sqrt,sin,cos,atan,exp和ln,都以实数为参数。

 

 

你可能感兴趣的:(SML(standard ML)入门学习(1))