OCaml In the previously lectures: • basic syntax: fun. application, let-s, arith. ops. • data types: strings, chars, variants, records, arrays • code organization: modules, module types • evaluation order: applicative, strict by default Kalmer Apinis OCaml (part 3) Functional Programming, Spring 2015
34
Embed
OCaml - utkodu.ut.ee/~kalmera/fp15/ocaml3.pdf · Kalmer Apinis OCaml (part 3) Functional Programming, Spring 2015. 2 TARTU LIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL S ltuvalt kujunduslikest
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
OCaml
In the previously lectures:• basic syntax: fun. application, let-s, arith. ops.• data types: strings, chars, variants, records, arrays• code organization: modules, module types• evaluation order: applicative, strict by default
Kalmer Apinis OCaml (part 3) Functional Programming, Spring 2015
2
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
ocamldebug demo
let _ = print_endline "Hi!"
let add x y = x + y
let main () =let z = 5 + 5 inprint_int (add z 7);print_endline "text"
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Mapsmodule type OrderedType =sig
type tval compare: t -> t -> int
end
module type S =sig
type keytype ’a tval empty: ’a tval add : key -> ’a -> ’a t -> ’a t...
end
module Make:functor (Ord : OrderedType) ->
S with type key = Ord.t
7
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
module IntPairs =struct
type t = int * intlet compare (x0,y0) (x1,y1) =
match Pervasives.compare x0 x1 with0 -> Pervasives.compare y0 y1
| c -> cend
module PairsMap = Map.Make(IntPairs)open PairsMap
let m = empty |> add (0,1) "hello"|> add (1,0) "world"
8
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Maps
• similar to template code in C++• defines immutable data structures• implemented with balanced binary trees• fixed type for the key; polymorphic over the value
9
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Hash tablesmodule type HashedType =sig
type tval equal : t -> t -> boolval hash : t -> int
end
module type S =sig
type keytype ’a tval create : int -> ’a tval add : ’a t -> key -> ’a -> unit...
endmodule Make:
functor (H : HashedType) ->S with type key = H.t
10
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
module IntHash =struct
type t = intlet equal (x:int) y = x=ylet hash (i:int) = i
end
module IntH = Hashtbl.Make(IntHash)
let h = IntH.create 17
let _ =IntH.add h 12 "hello"
11
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Hash maps
• defines a mutable data structure• arg. to create is the initial size of the table• implemented using an array of lists• fixed type for the key; polymorphic over the value
12
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Hashconstype ’a hobj = private {
obj : ’a;tag : int;hcode : int;
}module type Table =sig
type keytype tval create : int -> tval clear : t -> unitval hashcons : t -> key -> key hobj...
end
module MakeTable:functor (HT : HashedType) ->
Table with type key = HT.t
13
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
module PMTabel = MakeTable (PairsMap)
let tbl = PMTabel.create 10
let f () : PairsMap.t = ...
let f’ () : PairsMap.t hobj =Table.hashcons tbl (f ())
14
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Hashcons
• a mutable data structure• used for sharing values that are structurally equal• originates from Lisp• implemented using hash-maps of weak references
15
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Printf
Exampleopen Printf
let _ =printf "Hello World!";printf "Error %d: %s\n" 5 "file not found"
• Works as expected, but how?
15
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
Use case: Printf
Exampleopen Printf
let _ =printf "Hello World!";printf "Error %d: %s\n" 5 "file not found"
• Works as expected, but how?
16
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
that are used by the printer functionsval printf : (’a, out_channel, unit) format -> ’aval sprintf: (’a, unit, string) format -> ’aval fprintf: out_channel -> (’a,out_channel,unit) format -> ’aval bprintf: Buffer.t -> (’a, Buffer.t,unit) format -> ’a
Exampleprintf "Error %d: %s\n" : int -> string -> unitsprintf "Error %d: %s\n" : int -> string -> string
16
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
that are used by the printer functionsval printf : (’a, out_channel, unit) format -> ’aval sprintf: (’a, unit, string) format -> ’aval fprintf: out_channel -> (’a,out_channel,unit) format -> ’aval bprintf: Buffer.t -> (’a, Buffer.t,unit) format -> ’a
Exampleprintf "Error %d: %s\n" : int -> string -> unitsprintf "Error %d: %s\n" : int -> string -> string
16
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.
that are used by the printer functionsval printf : (’a, out_channel, unit) format -> ’aval sprintf: (’a, unit, string) format -> ’aval fprintf: out_channel -> (’a,out_channel,unit) format -> ’aval bprintf: Buffer.t -> (’a, Buffer.t,unit) format -> ’a
Exampleprintf "Error %d: %s\n" : int -> string -> unitsprintf "Error %d: %s\n" : int -> string -> string
17
TARTU ÜLIKOOLI TUNNUSGRAAFIKA LOGO HELEDAL TAUSTAL
Sõltuvalt kujunduslikest eesmärkidest ja tehnilistest võimalustest võib logo olla heledal taustal SININE, HALL/HÕBE või MUST.