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.