Elements of ML programming

by Jeffrey D. Ullman

Paper Book, 1998

Status

Available

Call number

005.133

Library's review

Indeholder "Preface", "1. A Perspective on ML and SML/NJ ", " 1.1 Why ML? ", " 1.2 Standard ML of New Jersey ", " 1.3 Prerequisites for the Reader ", " 1.4 References and Web Resources ", " 1.5 Features of ML97 ", "2. Getting Started in ML ", " 2.1 Expressions ", " 2.1.1 Constants ", " 2.1.2
Show More
Arithmetic Operators ", " 2.1.3 String Operators ", " 2.1.4 Comparison Operators ", " 2.1.5 Combining Logical Values ", " 2.1.6 If-Then-Else Expressions ", " 2.1.7 Exercises for Section 2.1 ", " 2.2 Type Consistency ", " 2.2.1 Type Errors ", " 2.2.2 Coercion Between Integers and Reals ", " 2.2.3 Coercions Between Characters and Integers ", " 2.2.4 Coercions Between Strings and Characters ", " 2.2.5 Exercises for Section 2.2 ", " 2.3 Variables and Environments ", " 2.3.1 Identifiers ", " 2.3.2 The Top-Level Environment ", " 2.3.3 An Assignment-Like Statement ", " 2.3.4 A View of ML Programming ", " 2.3.5 Exercises for Section 2.3 ", " 2.4 Tuples and Lists ", " 2.4.1 Tuples ", " 2.4.2 Accessing Components of Tuples ", " 2.4.3 Lists ", " 2.4.4 List Notation and Operators ", " 2.4.5 Converting Between Character Strings and Lists ", " 2.4.6 Introduction to the ML Type System ", " 2.4.7 Exercises for Section 2.4 ", "3. Defining Functions ", " 3.1 It's Easy; It's fun ", " 3.1.1 Function Types ", " 3.1.2 Declaring Function Types ", " 3.1.3 Function Application ", " 3.1.4 Functions With More Than One Parameter ", " 3.1.5 Functions that Reference External Variables ", " 3.1.6 Exercises for Section 3.1 ", " 3.2 Recursive Functions ", " 3.2.1 Function Execution ", " 3.2.2 Nonlinear Recursion ", " 3.2.3 Mutual Recursion ", " 3.2.4 How ML Deduces Types ", " 3.2.5 Exercises for Section 3.2 ", " 3.3 Patterns in Function Definitions ", " 3.3.1 Patterns as Function Parameters ", " 3.3.2 'As' You Like it: Having it Both Ways ", " 3.3.3 Anonymous Variables ", " 3.3.4 What Is and What Isn't a Pattern? ", " 3.3.5 How ML Matches Patterns ", " 3.3.6 A Subtle Pattern Bug ", " 3.3.7 Exercises for Section 3.3 ", " 3.4 Local Environments Using let ", " 3.4.1 Defining Common Subexpressions ", " 3.4.2 Effect on Environments of let ", " 3.4.3 Splitting Apart the Value Returned by a Function ", " 3.4.4 Mergesort: An Efficient, Recursive Sorter ", " 3.4.5 Exercises for Section 3.4 ", " 3.5 Case Study: Linear-Time Reverse ", " 3.5.1 Analysis of Simple Reverse ", " 3.5.2 ML's Representation of Lists ", " 3.5.3 A Reversal Function Using Difference Lists ", " 3.5.4 Analysis of Fast Reverse ", " 3.5.5 Exercises for Section 3.5 ", " 3.6 Case Study: Polynomial Multiplication ", " 3.6.1 Representing Polynomials by Lists ", " 3.6.2 A Simple Polynomial-Multiplication Algorithm ", " 3.6.3 Analysis of Simple Multiplication ", " 3.6.4 Auxiliary Functions for a Faster Multiplication ", " 3.6.5 The Karatsuba-Ofman Algorithm ", " 3.6.6 Analysis of the Karatsuba-Ofman Algorithm ", " 3.6.7 Exercises for Section 3.6 ", "4. Input and Output ", " 4.1 Simple Output ", " 4.1.1 The Print Function ", " 4.1.2 Printing Nonstring Values ", " 4.1.3 'Statement' Lists ", " 4.1.4 Statement Lists Versus Let-Expressions ", " 4.1.5 Exercises for Section 4.1 ", " 4.2 Reading Input From a File ", " 4.2.1 Instreams ", " 4.2.2 Reading Characters From a File ", " 4.2.3 Reading Lines of a File ", " 4.2.4 Reading Complete Files ", " 4.2.5 Reading a Single Character ", " 4.2.6 Lookahead on the Input ", " 4.2.7 Closing Instreams ", " 4.2.8 Exercises for Section 4.2 ", " 4.3 Output to Files ", " 4.3.1 Outstreams ", " 4.3.2 Closing Outstreams ", " 4.3.3 The output Command ", " 4.3.4 Exercises for Section 4.3 ", " 4.4 Case Study: Summing Integers ", " 4.4.1 The Function startInt ", " 4.4.2 The Function finishInt ", " 4.4.3 The Function getInt ", " 4.4.4 The Function sumInts ", " 4.4.5 Eager Evaluation ", " 4.4.6 Exercises for Section 4.4 ", "5. More About Functions ", " 5.1 Matches and Patterns ", " 5.1.1 Matches ", " 5.1.2 Using Matches to Define Functions ", " 5.1.3 Anonymous Functions ", " 5.1.4 Case Expressions ", " 5.1.5 If-Then-Else Expressions Revisited ", " 5.1.6 Exercises for Section 5.1 ", " 5.2 Exceptions ", " 5.2.1 User-Defined Exceptions ", " 5.2.2 Expressions With Parameters ", " 5.2.3 Handling Exceptions ", " 5.2.4 Exceptions as Elements of an Environment ", " 5.2.5 Local Exceptions ", " 5.2.6 Exercises for Section 5.2 ", " 5.3 Polymorphic Functions ", " 5.3.1 A Limitation on the Use of Polymorphic Functions ", " 5.3.2 Operators that Restrict Polymorphism ", " 5.3.3 Operators that Allow Polymorphism ", " 5.3.4 The Equality Operators ", " 5.3.5 Exercises for Section 5.3 ", " 5.4 Higher-Order Functions ", " 5.4.1 Some Common Higher-Order Functions ", " 5.4.2 A Simple Map Function ", " 5.4.3 The Function reduce ", " 5.4.4 Converting Infix Operators to Function Names ", " 5.4.5 The Function Filter ", " 5.4.6 Exercises for Section 5.4 ", " 5.5 Curried Functions ", " 5.5.1 Partially Instantiated Functions ", " 5.5.2 The ML Style of Function Application ", " 5.5.3 Exercises for Section 5.5 ", " 5.6 Built-In Higher-Order Functions ", " 5.6.1 Composition of Functions ", " 5.6.2 The ML Operator o For Composition ", " 5.6.3 The 'Real' Version of Map ", " 5.6.4 Folding Lists ", " 5.6.5 Exercises for Section 5.6 ", " 5.7 Case Study: Parsing Expressions ", " 5.7.1 The Grammatical Structure of Arithmetic Expressions ", " 5.7.2 Structure of the Parsing Program ", " 5.7.3 Detailed Explanation of the Parser Code ", " 5.7.4 Exercises for Section 5.7 ", "6. Defining Your Own Types ", " 6.1 Defining New Types ", " 6.1.1 Review of the ML Type System ", " 6.1.2 New Names for Old Types ", " 6.1.3 Parametrized Type Definitions ", " 6.1.4 Exercises for Section 6.1 ", " 6.2 Datatypes ", " 6.2.1 A Simple Form of Datatype Declaration ", " 6.2.2 Using Constructor Expressions in Datatype Definitions ", " 6.2.3 Recursively Defined Datatypes ", " 6.2.4 Mutually Recursive Datatypes ", " 6.2.5 Exercises for Section 6.2 ", " 6.3 Case Study: Binary Trees ", " 6.3.1 Binary Search Trees ", " 6.3.2 Lookup in Binary Search Trees ", " 6.3.3 Insertion into Binary Search Trees ", " 6.3.4 Deletion from Binary Search Trees ", " 6.3.5 Some Comments About Running Time ", " 6.3.6 Visiting All the Nodes of a Binary Tree ", " 6.3.7 Preorder Traversals ", " 6.3.8 Exercises for Section 6.3 ", " 6.4 Case Study: General Rooted Trees ", " 6.4.1 A Datatype for Trees ", " 6.4.2 Summing the Labels of a General Tree ", " 6.4.3 Computing Sums Using Higher-Order Functions ", " 6.4.4 Exercises for Section 6.4 ", "7. More About ML Data Structures ", " 7.1 Record Structures ", " 7.1.1 Records and Their Types ", " 7.1.2 Extracting Field Values ", " 7.1.3 Tuples as a Special Case of Record Structures ", " 7.1.4 Patterns That Match Records ", " 7.1.5 Shorthands in Record Patterns ", " 7.1.6 Exercises for Section 7.1 ", " 7.2 Arrays ", " 7.2.1 Why Do We Need Arrays? ", " 7.2.2 Array Operations ", " 7.2.3 Exercises for Section 7.2 ", " 7.3 References ", " 7.3.1 The ref Type Constructor ", " 7.3.2 Obtaining the Value of a Ref-Variable ", " 7.3.3 Modifying Ref-Variables ", " 7.3.4 The While-Do Statement ", " 7.3.5 Exercises for Section 7.3 ", " 7.4 Case Study: Hash Tables ", " 7.4.1 The Dictionary Operations ", " 7.4.2 How a Hash Table Works ", " 7.4.3 An Example of Hash Table Implementation ", " 7.4.4 Exercises for Section 7.4 ", " 7.5 Case Study: Triangularization of a Matrix ", " 7.5.1 Creating and Initializing the Matrix ", " 7.5.2 Triangularization by Row Operations ", " 7.5.3 Exercises for Section 7.5 ", "8. Encapsulation and the ML Module System ", " 8.1 Why Modules? ", " 8.1.1 Information Hiding ", " 8.1.2 Clustering Connected Elements ", " 8.2 Structures ", " 8.2.1 Signatures ", " 8.2.2 Restricting Structures Through Their Signatures ", " 8.2.3 Accessing Names Defined Within Structures ", " 8.2.4 Opening Structures ", " 8.2.5 Exercises for Section 8.2 ", " 8.3 Functors ", " 8.3.1 Motivation for Functors ", " 8.3.2 Using Functors to Import Information ", " 8.3.3 More General Forms for Functor Parameters and Arguments ", " 8.3.4 Exercises for Section 8.3 ", " 8.4 Sharings ", " 8.4.1 Sharing Specifications ", " 8.4.2 Substructures ", " 8.4.3 Sharing of Types ", " 8.4.4 Sharing of Substructures ", " 8.4.5 Exercises for Section 8.4 ", " 8.5 ML Techniques for Hiding Information ", " 8.5.1 An Information-Hiding Problem ", " 8.5.2 Using Signatures to Hide Information ", " 8.5.3 Abstract Types ", " 8.5.4 Local Definitions ", " 8.5.5 Opaque Signatures ", " 8.5.6 Exercises for Section 8.5 ", " 8.6 Case Study: Feedback Shift Registers ", " 8.6.1 Operation of a Feedback Shift Register ", " 8.6.2 A Functor to Create Random Number Generators ", " 8.6.3 Generating a Feedback Shift Register ", " 8.6.4 Exercises for Section 8.6 ", "9 Summary of the ML Standard Basis ", " 9.1 The Infix Operators ", " 9.1.1 Precedence ", " 9.1.2 Precedence Levels in ML ", " 9.1.3 Associativity of Operators ", " 9.1.4 Creating New Infix Operators ", " 9.1.5 Infix Data Constructors ", " 9.1.6 Exercises for Section 9.1 ", " 9.2 Functions in the Top-Level Environment ", " 9.2.1 Functions on Integers ", " 9.2.2 Functions on Reals ", " 9.2.3 Functions on Booleans ", " 9.2.4 Functions on Characters ", " 9.2.5 Functions on Strings ", " 9.2.6 Functions on Options ", " 9.2.7 Functions on References ", " 9.2.8 Functions on Lists ", " 9.2.9 Functions on Exceptions ", " 9.2.10 Functions Affecting Return Values ", " 9.2.11 Exercises for Section 9.2 ", " 9.3 Top-Level Types and Exceptions ", " 9.3.1 Primitive Types ", " 9.3.2 Primitive Type Constructors ", " 9.3.3 Primitive Datatypes ", " 9.3.4 Top-Level Exceptions ", " 9.3.5 Exercises for Section 9.3 ", " 9.4 Structures of the Standard Basis ", " 9.4.1 The Structure Int ", " 9.4.2 The Structure Word ", " 9.4.3 The Structures Real and Math ", " 9.4.4 The Structure Char ", " 9.4.5 The Structure String ", " 9.4.6 The Structure Substring ", " 9.4.7 The Structure List ", " 9.4.8 The Structure Array ", " 9.4.9 The Structure Vector ", " 9.4.10 The Structure OS ", " 9.4.11 The Structures Time and Timer ", " 9.4.12 What If I Lose a Name? ", " 9.4.13 Exercises for Section 9.4 ", " 9.5 Additional Features of SML/NJ ", " 9.5.1 Exporting Functions ", " 9.5.2 Exporting the ML Environment ", " 9.5.3 Exercises for Section 9.5 ", " 9.6 Summary of ML Syntax ", " 9.6.1 Lexical Categories ", " 9.6.2 Some Simplifications to the Grammatical Structure ", " 9.6.3 Expressions ", " 9.6.4 Matches and Patterns ", " 9.6.5 Types ", " 9.6.6 Declarations ", " 9.6.7 Signatures ", " 9.6.8 Structures ", " 9.6.9 Functors ", " 9.6.10 Programs ".

Præsentation af ML sproget og i særdeleshed ML97 edition og New Jersey ML. ML har en pudsighed med at bruge ~ som unært minus, dvs det hedder ikke -42, men ~42.

Nemt at installere på min linux box: sudo apt install smlnj

(*
val _ = fun i2s i = String.map (fn #"~" => #"-" | c => c) (Int.toString i);
*)
val _ = print "Hello World!n";
val _ = print((Int.toString (3+7)) ^ "n");
val _ = print((Int.toString (3-7)) ^ "n");
val _ = OS.Process.exit(OS.Process.success);

$ export CM_VERBOSE=false; sml /tmp/1.sml | tail -n +3
Hello World!
10
~4

Der er simpelthen for langt at gå, hvis man vil skrive noget ikke-trivielt. Man kan i stedet bruge mlton compileren til at generere stand-alone programmer.
Show Less

Publication

Upper Saddle River, N.J. : Prentice-Hall International, 1998.

Description

Written by a well-known computer science education and researcher. No previous knowledge of ML or functional programming is assumed. This is the first book that offers BOTH a highly accessible, step-by-step introductory tutorial on ML programming and a complete reference to, and explanation of, advanced features. The author uses a wide variety of digestible program examples to bring the reader along at a reasonable pace. More sophisticated programs and advanced concept topics balance out a book that is usable in a number of courses and settings for either self-study or class discussion.

User reviews

LibraryThing member koffieyahoo
[This is a review of the first edition.]

Nice introduction to programming in ML. Unfortunately, at quite a number of points the book first introduces concepts in a completely abstract way with only giving examples many pages later, which rather inconveniently meant I had to go back and forth quite a
Show More
number of times. Even worse, in a few instances no proper examples occur at all of the abstract concepts. Finally, the last two chapters of the book completely overshoot their target by enumerating all build-in functions of SML/NJ and by presenting the complete syntax of ML in a Pascal-like way, but I think the latter was very much in fashion at the time of writing.
Show Less

Language

Original language

Danish

Physical description

xiii, 383 p.; 23.3 cm

ISBN

0137903871 / 9780137903870

Local notes

Omslag: Luca Cardelli
Omslaget viser et landkort over forskellige begreber, fx den store ad-hoc vulkan
Indskannet omslag - N650U - 150 dpi
Jeffrey David Ullman

Pages

xiii; 383

Library's rating

½

Rating

½ (11 ratings; 3)

DDC/MDS

005.133
Page: 0.1925 seconds