View
212
Download
0
Embed Size (px)
Citation preview
Introduction to ML – Part 1
Kenny Zhu
Assignment 2 http://www.cs.princeton.edu/courses/archive/fall07/cos441/assignments/a2.htm
Due next Monday (Oct 1st)
Introduction to ML This lecture: some basics on the SML language and how to interact with the SML/NJ run time system
Next lecture: implement more complex system using SML
Resources: Robert Harper’s “Programming in Standard ML” Peter Lee’s “Notes on using SML/NJ systems” SML/NJ Basis Library
http://www.standardml.org/Basis/index.html See course webpage for pointers and info about how to get the software
Standard ML Standard ML is a general-purpose functional programming language with type checking and type inference
Emphasizes applications of functions, not state changes and mutable data
Support for Complex data structures Memory management like Java Large projects with many modules Advanced type system for error detection
ML Highlights Interactive Language
Type in expressions Evaluate and print result Compile into binary as well
Strongly-typed language Every expression has a type Functions as values Certain errors cannot occur Polymorphic types provide flexibility
ML Highlights High-level programming features
Data types Pattern matching Exceptions Mutable data discouraged Modules and functors
Basic types and expressions Int: 3+5, 2*6, 100 div 2, 2-5, ~3 Real: 3.1415, 100.0/3.0, ~1.5 Char: #”!” String “abc”, “hello” ^ “ “ ^ “world”
Bool: true, false, (5>6), (3<>4), a andalso b, c orelse d
Unit: ()
Data structures Tuple: (“george”, 35) Record: {name = “george”, age = 35}
List: 1::(2::(3::(4::nil)))) 1::2::3::4::nil 1::2::3::4::[] (1::2::nil)@(3::4::nil) [1,2,3,4] 1::2::[3,4]
Declaration val x = 5 let val a = 4 val b = 2 in a + b end fun succ x = x + 1 exception SomeException <of string> type complex_num = (real * real) val n = (3.0, 5.5) datatype number = Int of int | Real of real val n1 = Real ~8.0
Functions fun f (x, y) = x * y fun f x y = x * y (curried form) fn (x:int, y:int) :int => x * y val f = fn x y => x * y fun f pat_1 = exp_1 | f pat_2 = exp_2 | f pat_3 = exp_2 | f _ = exp_default
Other Useful Expressions if x>0 then x-1 else x+1 case num of Int x -> x div 2 | Real y -> y / 2.0
(expr_1; expr_2; …; expr_n) raise SomeException “Fatal Error” some_expr handle SomeExpection s =>
print s
When your program grows… Interactive mode is a good way to start learning and to debug programs, but…
Type in a series of declarations into a “.sml” file
- use “foo.sml”[opening foo.sml]…
list of declarationswith their types
Larger Projects SML has its own built in interactive “make”
Pros: It automatically does the dependency analysis for you
No crazy makefile syntax to learn Cons:
May be more difficult to interact with other languages or tools
Compilation Manager
% sml
- OS.FileSys.chDir “~/courses/510/a2”;
- CM.make(); looks for “sources.cm”, analyzes dependencies
[compiling…] compiles files in group
[wrote…] saves binaries in ./CM/
- CM.make’ “myproj/”(); specify directory
sources.cmc.sml
b.sml
a.sig
Group isa.sigb.smlc.sml
SML/NJ Demo