ML: Built-in Functions

Functions on Int and Real
name type(s) action
~ int -> int or real -> real negates its argument
min, max int*int -> int obvious
abs int -> int or real -> real absolute value
real int -> real convert integer into real of same value
floor, ceiling, trunc real -> int conversions
sin, cos, arctan real -> real angles in radians
sqrt,exp,ln real -> real obvious
chr int -> string ASCII code
makestring int -> string or real -> string produces text digits
print int -> unit or real -> unit side effect is output

Functions on String
name type(s) action
explodestring -> string list makes list of single characters
implodestring list -> string ...
size string -> int ...
substring string*int*int -> string first int is starting position (from 0), second int is # if characters to include; will generate exception is # characters runs off end of string
ord string -> int convert first character of string to ASCII code
ordof string*int -> int convert character at position in a string
printstring -> unit overloaded...

Functions on Boolean
name type(s) action
andalso, orelse bool*bool -> bool logical operations
not bool -> bool logical negation
makestring bool -> string turn boolean value into its name
print bool -> unit overloaded ...

Functions on Lists
name type(s) action
hd 'a list -> 'a head of a list
tl 'a list -> 'a list tail of a list
nth 'a list * int -> 'a list element selector (start from 0)
nthtail 'a list * int -> 'a list produce tail of a list starting from the indicated element
null 'a list -> bool is the list empty?
length 'a list -> int number of elements in a list
rev 'a list -> 'a list reverse a list
map ('a -> 'b) -> 'a list -> 'b list apply a function to all elements in a list
app, revapp ('a -> 'b) -> 'a list -> unit like map but return "unit" instead of the list... however, the function is applied to elements in the list; useful for side effects like printing each list element
fold,revfold (('a * 'b) -> 'b) -> 'a list -> 'b -> 'b composes a list of functions
exists ('a -> bool) -> 'a list -> bool takes a predicate P and a list of type-matching elements, returns true if at least one of the list elements satisfies P.

ML: Built-in Exceptions

name description
Io an error has occurred during input or output
Bind a pattern has failed to match the expression to which it must be bound
ex: val x::xs = nil
Match a match has no pattern that matches the expression to which it is applied
Div a division by zero
Overflow The result of arithmetic op on int or real does not fit storage for that type
Sqrt arg to sqrt is negative
Exp arg to exp is invalid
Ln arg to ln is invalid
Chr chr was given an integer out of range
Ord ord was given the empty string
Substring substring was given a range not fully in the string argument
ex: substring("abc",2,4)
Range raised with type "bytearray"
Hd, Tl using hd or tl on empty list
Nth, NthTail functions applied to list without the desired position in it
ex: nth([10,20,30],5)
Subscript array reference out of range