ML is indeed a pretty
cool Functional Programming Language. It is a language whose
semantics are close enough to those of
lamba calculus to make proving things about ML programs in a mathematically rigorous way possible.
I first came across ML as a first-year undergraduate at
Cambridge University, where it is used as a teaching language with which very few
students have had prior experience (most are already familiar with several
imperative languages e.g.
C/
Pascal).
The first piece of ML code I ever saw was this one:
fun fact 0 = 1
| fact n = n * fact (n-1);
This function can be used to calculate the
factorial of a positive integer. It should be fairly clear how it works: The language uses a (
polymorphic) type checker which
interprets the first matching "type instance" satisfied in a function definition (c.f.
Prolog clauses!). The
| symbol can be read as "or".
Of course, ML gets far more complicated (and exciting!) than this. It has concepts of
lazy evaluation and its
datatype operator can provide hours of fun.