Functional Programming Using Standard ML

by Åke Wikström

Paper Book, 1988

Status

Available

Call number

005.13

Library's review

Indeholder "Preface", "1. Computers, Data, and Programs", " 1.1 Symbols and Abstractions", " 1.1.1 Data", " 1.1.2 Names and concepts", " 1.2 Numbers and Arithmetic", " 1.2.1 Numbers and numerals", " 1.2.2 Arithmetic and algorithms", " 1.2.3 Arithmetic expressions", " 1.2.4 Variables and formulas", " 1.3 Modelling the Real World", " 1.4 Computing Tools and Machines", " 1.4.1 Algorithms and programs", " 1.4.2 The stored-program computer", " 1.4.3 Programming languages", " 1.4.4 What computers can do", "2. Numbers", " 2.1 Computing with Integers", " 2.2 Computing with Real Numbers", " 2.3 The Relation between Integers and Reals", "3. Names and Declarations", "4. Functions", " 4.1 Functions in General", " 4.2 Functions in Programming", " 4.2.1 Procedural and functional abstraction", " 4.2.2 Functions in ML", " 4.2.3 Semantics of function applications", " 4.3 Using Functions to Define Functions", " 4.4 Type Constraints", "5. Systematic Program Construction", " 5.1 Specifying the Problem", " 5.2 Top-down Design", " 5.3 Program Verification", " 5.4 Running the Program", " 5.4.1 Error messages", " 5.4.2 Testing and debugging", " 5.4.3 Inserting and editing programs", "6. Truth Values", " 6.1 Boolean Values and Expressions", " 6.1.1 Conditional expressions", " 6.1.2 Indentation", " 6.1.3 Boolean functions", " 6.1.4 Equality operations", " 6.2 Boolean Expressions", " 6.2.1 Truth tables", " 6.2.2 Precedences revisited", " 6.3 Lazy Evaluation", " 6.4 Problem Decomposition and Case Analysis", "7. Characters and Strings", " 7.1 The ASCII Code", " 7.2 Escape Sequences", " 7.3 Standard String Functions and Operators", "8. Pairs and Tuples", " 8.1 Pairs", " 8.1.1 The constructor of pair types", " 8.1.2 Type completeness", " 8.1.3 Decomposing pairs", " 8.1.4 Polymorphic functions", " 8.1.5 Comparing pairs", " 8.2 Tuples", "9. Syntax", " 9.1 The Lexical Structure", " 9.2 Syntax Charts", " 9.3 BNF Grammars", " 9.4 Context Dependence", "10. Semantics", " 10.1 Evaluation of ML Programs", " 10.1.1 Evaluation of expressions", " 10.1.2 Environments", " 10.1.3 Evaluation of declarations and programs", " 10.2 Semantics of Functions", "11. Declarations", " 11.1 Scope Rules", " 11.2 Local Declarations", " 11.2.1 Local declarations in expressions", " 11.2.2 Local declarations in declarations", " 11.2.3 Formal semantics of local declarations", " 11.3. Multiple Bindings", " 11.4 Datatype Declarations", "12. Pattern Matching and Case Analysis", " 12.1 Pattern Matching", " 12.1.1 The various pattern forms", " 12.1.2 Exhaustive and irredundant patterns", " 12.1.3 Matches", " 12.1.4 Formal semantics of pattern matching", " 12.2 Case Analysis", "13. Lists", " 13.1 Construction and Analysis of Lists", " 13.2 Exceptions and Errors", " 13.3 Useful List Handling Functions", " 13.3.1 Standard list handling functions", " 13.3.2 Predefined list handling functions", " 13.4 Complexity of Algorithms", "14. Recursion and Repetitive Computations", " 14.1 General Principles of Recursion", " 14.1.1 Recursive function definitions", " 14.1.2 The principle of induction", " 14.1.3 Recursion over lists", " 14.1.4 Variations of the basic recursion scheme", " 14.1.5 Tracing recursive functions", " 14.1.6 Example: The median of a set of numbers", " 14.1.7 Semantics of recursive bindings", " 14.2 String Manipulation", " 14.3 Recursion over Natural Numbers", "15. Higher Order Functions", " 15.1 Partially Applicable Functions", " 15.2 Functional Arguments", " 15.3 Map, a Useful List Handling Function", " 15.4 The Compose Operator", " 15.5 Examples of Higher Order Functions", " 15.5.1 Curried versions of operators", " 15.5.2 The standard deviation", " 15.5.3 Summation of series", " 15.5.4 Some combinators", " 15.5.5 Mathematical notation compared with ML", "16. Operators", "17. List Handling Functions", " 17.1 List Generating Functions", " 17.1.1 A general list generator", " 17.1.2 Random number generators", " 17.2 List Transforming Functions", " 17.3 List Searching Functions", " 17.4 List Reducing Functions", " 17.5 Equations, Algebra, and Efficiency", " 17.6 The Use of Explicit Recursion", " 17.7 Some Data Structures", " 17.7.1 Sets", " 17.7.2 Tables", " 17.7.3 Vectors and matrices", " 17.7.4 Files", "18. Classes of Recursive Functions", " 18.1 Primitive Recursive Functions", " 18.1.1 Course-of-values recursion", " 18.1.2 Multiple recursion", " 18.1.3 Mutual recursion", " 18.1.4 Branching recursion", " 18.2 General Recursion", " 18.2.1 The Ackermann function", " 18.2.2 Partial recursive functions", " 18.3 Iteration and Tail Recursion", " 18.3.1 Number controlled iteration", " 18.3.2 Tail recursion", " 18.3.3 Condition controlled iteration", "19. Concrete Data Types", " 19.1 Types with Structured Objects", " 19.2 Union Types", " 19.3 Named Types", " 19.4 Records", " 19.5 Selectors and Predicates", " 19.6 Non-regular Types", " 19.7 Type Functions", " 19.8 General Properties of Types", " 19.8.1 Syntax: Type expressions", " 19.8.2 Semantics: The meaning of a type", " 19.8.3 Pragmatics: The use of types", "20. Recursive Data Types", " 20.1 Linearly Recursive Data Types", " 20.1.1 Lists", " 20.1.2 Natural numbers", " 20.1.3 Stacks", " 20.1.4 Free and non-free types", " 20.2 Binary Trees", " 20.2.1 Binary branching structures", " 20.2.2 Labelled binary trees", " 20.2.3 Binary leaf trees", " 20.2.4 Full binary trees", " 20.2.5 General binary trees", " 20.3 Trees and Forests", " 20.4 Abstract Syntax Trees", "21. Abstract Data Types", " 21.1 Data Abstraction", " 21.2 Linear Structures", " 21.2.1 Ordered sequences", " 21.2.2 Sequential files", " 21.3 Sets", " 21.3.1 Set abstraction", " 21.3.2 Operations on finite sets", " 21.3.3 Sets as binary search trees", " 21.3.4 Infinite sets", " 21.3.5 Relations", " 21.3.6 Tables and finite mappings", " 21.3.7 Graphs", "22. Input and Output", " 22.1 Standard Input and Output Commands", " 22.2 Input and Output of Data Objects", " 22.3 Example: A Vocabulary Examiner", "23 Programming Methodology", " 23.1 Specification", " 23.1.1 Validation", " 23.1.2 Rapid prototyping", " 23.1.3 Automatic programming", " 23.2 Programming", " 23.2.1 Programming in the large", " 23.2.2 Top-down design", " 23.2.3 Bottom-up design", " 23.2.4 Structured growth", " 23.2.5 Program derivation", " 23.3 Verification", " 23.3.1 Bottom-up testing", " 23.3.2 Debugging", " 23.3.3 Efficiency and optimization", " 23.4 What is a Good Program?", "References", "Glossary", "Answers to Exercises", "A The ASCII character set", "B. The Standard ML Core Language", " Standard ML Input/Output", "C. Syntax Charts for a Subset of Standard ML", "D. Predefined Functions", "Index".

Det er sikkert uretfærdigt, men jeg har aldrig kodet noget i Standard ML, så jeg kan ikke rigtig bedømme den her bog. Man kan godt bruge SML som et almindeligt programmeringssprog, dvs fx skrive et program, der outputter en pnm bitmap. Det kræver blot at man bruger en TextIO.output til at skrive til fx stdin og så redirigerer stdout til /dev/null. En sjov feature er at man som helt standard kan definere nye infix operatorer i sproget, så man fx kan lave sig en plus operator.
Man skal anstrenge sig noget for ikke at få alt muligt forstyrrende output fra SML fortolkeren, dels er det ret uintuitivt hvordan man får fortolkeren til at stoppe og dels hedder unært minus altså ~ og ikke - på SML jargon. Det er sådan set fint nok at skelne mellem unært og binært minus, men det er ret besværligt, hvis man vil have et normalt minus ud som resultat. Typesystemet er også lidt træls, hvis man fx laver en funktion, der ganger kvadratet af argumentet med pi, så er typen jo fn : real over i real, og så kan man ikke kalde funktionen med 7 som argument, men 7.0 er fint.

Alt i alt er Standard ML ikke ret godt til at skrive almindelige brugbare programmer i. Men bogen er sådan set ok.
… (more)

Publication

Prentice Hall (1988), Hardcover, 464 pages

Language

Original language

English

Physical description

464 p.; 23.5 cm

ISBN

0133316610 / 9780133316612

Local notes

Omslag: Ikke angivet
Omslaget viser titel og forfatternavn samt editor og forlag med sort på en hvid og rød baggrund
Indskannet omslag - N650U - 150 dpi
Prentice-Hall International Series in Computer Science
Side 342: To become a really good programmer is like becoming a good piano player or a good craftsman. You need both talent and a lot of practice, and there is really no short cut to that goal. The reason is that programming is a form of problem solving, which is a difficult task.
Page: 0.2669 seconds