A Fourth Look At ML
Chapter Eleven Modern Programming Languages, 2nd ed. 1
A Fourth Look At ML Chapter Eleven Modern Programming Languages, - - PowerPoint PPT Presentation
A Fourth Look At ML Chapter Eleven Modern Programming Languages, 2nd ed. 1 Type Definitions Predefined, but not primitive in ML: datatype bool = true | false; Type constructor for lists: datatype 'element list = nil | :: of 'element *
Chapter Eleven Modern Programming Languages, 2nd ed. 1
Chapter Eleven Modern Programming Languages, 2nd ed. 2
Chapter Eleven Modern Programming Languages, 2nd ed. 3
– type constructors for making new (possibly
– data constructors for making values of those
Chapter Eleven Modern Programming Languages, 2nd ed. 4
Chapter Eleven Modern Programming Languages, 2nd ed. 5
datatype day = Fri | Mon | Sat | Sun | Thu | Tue | Wed
val isWeekDay = fn : day -> bool
val it = true : bool
val it = false : bool
Chapter Eleven Modern Programming Languages, 2nd ed. 6
datatype day = Fri | Mon | Sat | Sun | Thu | Tue | Wed
Chapter Eleven Modern Programming Languages, 2nd ed. 7
datatype flip = Heads | Tails
val isHeads = fn : flip -> bool
val it = false : bool
Error: operator and operand don't agree [tycon mismatch]
Chapter Eleven Modern Programming Languages, 2nd ed. 8
Chapter Eleven Modern Programming Languages, 2nd ed. 9
datatype exint = Value of int | PlusInf | MinusInf;
Chapter Eleven Modern Programming Languages, 2nd ed. 10
36
26
38
Chapter Eleven Modern Programming Languages, 2nd ed. 11
datatype exint = MinusInf | PlusInf | Value of int
val it = PlusInf : exint
val it = MinusInf : exint
val it = fn : int -> exint
val it = Value 3 : exint
Chapter Eleven Modern Programming Languages, 2nd ed. 12
val x = Value 5 : exint
Error: overloaded variable not defined at type symbol: + type: exint
Chapter Eleven Modern Programming Languages, 2nd ed. 13
Chapter Eleven Modern Programming Languages, 2nd ed. 14
Chapter Eleven Modern Programming Languages, 2nd ed. 15
= | square MinusInf = PlusInf = | square (Value x) = Value (x*x); val square = fn : exint -> exint
val it = PlusInf : exint
val it = Value 9 : exint
Chapter Eleven Modern Programming Languages, 2nd ed. 16
Chapter Eleven Modern Programming Languages, 2nd ed. 17
Chapter Eleven Modern Programming Languages, 2nd ed. 18
"Hello"
"world"
1.5
123.4
Chapter Eleven Modern Programming Languages, 2nd ed. 19
val it = SOME 4 : int option
val it = SOME 1.2 : real option
val it = SOME "pig" : string option
Chapter Eleven Modern Programming Languages, 2nd ed. 20
Chapter Eleven Modern Programming Languages, 2nd ed. 21
Chapter Eleven Modern Programming Languages, 2nd ed. 22
= | size (Group x) = length x; val size = fn : 'a bunch -> int
val it = 1 : int
val it = 2 : int
Chapter Eleven Modern Programming Languages, 2nd ed. 23
Chapter Eleven Modern Programming Languages, 2nd ed. 24
Chapter Eleven Modern Programming Languages, 2nd ed. 25
INTNIL INTCONS the empty list INTNIL 1 the list [1] INTCONS INTNIL 2 INTCONS 1 the list [1,2]
Chapter Eleven Modern Programming Languages, 2nd ed. 26
val it = INTNIL : intlist
val it = INTCONS (1,INTNIL) : intlist
val it = INTCONS (1,INTCONS (2,INTNIL)) : intlist
INTNIL INTCONS the empty list INTNIL 1 the list [1] INTCONS INTNIL 2 INTCONS 1 the list [1,2]
Chapter Eleven Modern Programming Languages, 2nd ed. 27
fun intlistLength INTNIL = 0 | intlistLength (INTCONS(_,tail)) = 1 + (intListLength tail); fun listLength nil = 0 | listLength (_::tail) = 1 + (listLength tail);
Chapter Eleven Modern Programming Languages, 2nd ed. 28
Chapter Eleven Modern Programming Languages, 2nd ed. 29
Chapter Eleven Modern Programming Languages, 2nd ed. 30
Chapter Eleven Modern Programming Languages, 2nd ed. 31
Chapter Eleven Modern Programming Languages, 2nd ed. 32
Empty Node the empty tree 2 the tree 2 Empty Empty Node 3 Empty Empty Node 1 the tree 2 Empty Empty 2 1 3 Node
Chapter Eleven Modern Programming Languages, 2nd ed. 33
Chapter Eleven Modern Programming Languages, 2nd ed. 34
val it = Node (Node (Empty,2,Empty), 3, Node (Empty,4,Empty)) : int tree
Chapter Eleven Modern Programming Languages, 2nd ed. 35
Chapter Eleven Modern Programming Languages, 2nd ed. 36
Chapter Eleven Modern Programming Languages, 2nd ed. 37
Chapter Eleven Modern Programming Languages, 2nd ed. 38
– records (like tuples with named fields) – arrays, with elements that can be altered – references, for values that can be altered – exception handling
Chapter Eleven Modern Programming Languages, 2nd ed. 39
– support for encapsulation and data hiding:
structures: collections of datatypes, functions, etc. signatures: interfaces for structures functors: like functions that operate on structures,
Chapter Eleven Modern Programming Languages, 2nd ed. 40
– API: the standard basis
predefined functions, types, etc. Some at the top level but most in structures:
Chapter Eleven Modern Programming Languages, 2nd ed. 41
– eXene: an ML library for applications that work
– the Compilation Manager for building large
– Ocaml – F# (in Visual Studio, for the .NET platform) – Concurrent ML (CML) extensions
Chapter Eleven Modern Programming Languages, 2nd ed. 42
Chapter Eleven Modern Programming Languages, 2nd ed. 43