|
|
| types |
unit, int, real, bool, char, string, exn |
basic types, NB. ( ):unit |
| consts |
127:int, 0x7F |
an integer constant (and hexa-decimal) |
| 3.14:real, 0.314e1, 31.4E~1 |
reals, floating point |
| ~ |
unary minus, NB not `-' |
| true:bool, false:bool |
|
| #"a":char | |
"fred":string, "":string "multi-line \ string" |
|
| ops |
+, -, *, /, div, mod |
arithmetic operators NB. /:real*real->real |
| ^ | string concatenation |
=, <, >, <=, >=, <>
e.g. 2<10, "2">"10" |
comparison operators NB. =, <> do not apply to reals |
| not, andalso, orelse |
boolean operators (short-cutting) |
| if e then et else ef |
|
| types |
(e1, e2, ...): t1*t2*... | tuple : product type |
| fn x=>e :tx->te |
function : function type |
| coercions |
real:int->real | |
ord:char->int, chr:int->char,
str:char->string,
explode:string->char list,
implode:char list->string |
chars <-> strings |
| tuples, records |
#1(11,22,33) = 11, #2, etc. | tuple, extract component |
{id1=e1, ...}
#id1{id1=e1,...}=e1 |
record, extract field |
| strings |
substring("012345",2,4)="234" |
also see coercions |
| lists |
[]:'t list, [1,2,3]:int list |
list value : list type |
| nil, [] | empty list |
| :: :'t*'t list -> 't list |
list constructor, [1,2] = 1::(2::nil) |
| hd:'t list->'t, tl:'t list -> 't list |
list head and tail operators |
| null:'t list -> bool | test empty? |
| @: 't list * 't list -> 't list |
list append, concatenate |
| vector |
#[1,2,3] :int vector | NB. immutable |
| vector [1,2,3] = #[1,2,3] |
convert list to vector |
| ref |
ref 7 : int ref | ref value : ref type |
| ! | :'t ref -> 't, de-reference |
| := | assign to, change, a ref |
| lexical |
fred, Jane_Doe, x1, x'y | identifiers |
| ( ) [ ] { } " . , ; | reserved |
| + - / * < > = ! @ # $ % ^ & ` ~ \ | ? : |
chars for symbolic ids. -- be careful |
| 't etc. | type variable |
| syntax |
let decs in exp end |
local declarations, see
block structure
|
| (e1;e2;...;en) |
expression returns en |
| if e then et else ef |
equiv. case e of true=>et | false=>ef; |
| case e of <match> | |
| while e do e' | NB. returns ():unit |
| decs. |
val x = e | value declaration |
| fun f x = e | function declaration |
| fun f(x,t) = e |
uncurried function :tx*ty->te |
| fun f x y = e |
curried function :tx->ty->te |
fun f pat1= e1
| f pat2= e2 |... |
definition "by cases", by pattern matching |
| type {tparams} id = type_exp | |
| datatype {tparams} id = c1 of type |... |
type declaration |
| exceptions |
Div, Chr, Empty,... | standard exceptions |
| exception i |
declare exception, i:exn, ... |
| exception i of t |
... with parameter(s) |
| raise i | |
| e handle <match> | handle exception |
|
window on the wide world:
SML:
| :: | cons |
| [x1,...] | list |
| [ ] | list |
| @ | append |
| fn => | &lambda . |
| : | has type |
Compared
|
|
|