The new edition of this successful and established textbook retains its two original intentions of explaining how to program in the ML language, and teaching the fundamentals of functional programming. The major change is the early and prominent coverage of modules, which are extensively used throughout. In addition, the first chapter has been totally rewritten to make the book more accessible to students who have no experience of programming languages. The main features of new Standard Library for the revised version of ML are described, and many new examples are given, e.g. polynomial arithmetic and new ways of treating priority queues. Finally references have been completely updated.Dr Paulson has extensive practical experience of ML, and has stressed its use as a tool for software engineering; the book contains many useful pieces of code, which are freely available (via Internet) from the author. He shows how to use lists, trees, higher-order functions and infinite data structures. Many illustrative and practical examples are included, covering sorting, matrix operations, polynomial arithmetic, etc. Efficient functional implementations of arrays, queues, priority queues, etc. are described. Larger examples include a general top-down parser, a lambda-calculus reducer and a theorem prover. A chapter is devoted to formal reasoning about functional programs.The combination of careful explanation and practical advice will ensure that this textbook continues to be the preferred text for many courses on ML.