- (* 3.3.2 *) - fun flip(nil) = nil = | flip(x::nil) = [x] = | flip(x::y::zs) = y::x::flip(zs); val flip = fn : 'a list -> 'a list - flip([1,2,3,4,5,6]); val it = [2,1,4,3,6,5] : int list - (* 3.3.3 *) - (* L = [a1, a2, a3, ..., an] -> [a1, a2, .... , ai-1, ai+1, ...] *) - val rec remove = fn (nil, _) => nil | = (L, 0) => L | = (x::xs, 1) => xs | = (x::xs, i) => x::remove(xs, i-1); val remove = fn : 'a list * int -> 'a list - remove(L, 3); val it = [1,2,4,5,6,7] : int list - (* 3.3.4 *val it = 6 : int - (* sumLists(L) -> 1 + sumLists([[2], nil, [3]) = -> 1 + 2 + sumLists([nil, nil, [3]]) = -> 1 + 2 + sumLists([nil, [3]]) = -> 1 + 2 + sumLitsts([[3]]) = -> 1 + 2 + 3 + sumLitsts(nil) = -> 6 = *) - (* 3.3.5 *) - (* (x::y::zs, w) *) - (["a", "b", "c"], ["d", "e"]); val it = (["a","b","c"],["d","e"]) : string list * string list - (* x="a", y="b", zs=["c"], w=["d", "e"] *) - (["a", "b"], 4.5); val it = (["a","b"],4.5) : string list * real - (* x="a", y="b", zs=nil, w=4.5 *) - ([5], [6,7]); val it = ([5],[6,7]) : int list * int list - (* x=5, y=.... -> fail *) - (* 3.3.6 *) - (* 3.3.7 *) - fun square(0) = 0 = | square(n) = square(n-1) + 2*n - 1; val square = fn : int -> int - square(3); val it = 9 : int - square(11); val it = 121 : int - (* 3.3.8 *) - fun sortPair(nil) = nil = | sortPair((m,n)::xs) = = if m (int * int) list - sortPair([(2,1),(10,5),(4,3),(11,9)]); val it = [(1,2),(5,10),(3,4),(9,11)] : (int * int) list - (* 3.3.9 *) - fun vowel(nil) = false = | vowel(c::cs) = = if c = #"a" orelse c = #"i" orelse c = #"u" orelse c = #"e" orelse c = #"o" then true else false; val vowel = fn : char list -> bool - (* ... orelse c = #"A" orelse c = #"I" orelse .... *) - fun vowel(nil) = false = | vowel(c::cs) = c = #"a" orelse c = #"i" orelse c = #"u" orelse c = #"e" orelse c = #"o"; val vowel = fn : char list -> bool - vowel(explode("abc")); val it = true : bool - vowel(explode("bca")); val it = false : bool - (* 3.3.11 *) - fun member(_, nil) = false = | member(x, y::ys) = = if x=y then true else member(x,ys); stdIn:126.11 Warning: calling polyEqual val member = fn : ''a * ''a list -> bool - member(2, [1,2,3]); val it = true : bool - member(1, [0,2,3,4]); val it = false : bool - val rec member = fn = (_, nil) => false | = (x, y::ys) => if x=y then true else member(x,ys); stdIn:131.28 Warning: calling polyEqual val member = fn : ''a * ''a list -> bool - member(1, [1,2,3]); val it = true : bool - member(10, [1,2,5]); val it = false : bool - fun delete(_,nil) = nil = | delete(x,y::ys) = if x=y then ys else y::delete(x,ys); stdIn:135.27 Warning: calling polyEqual val delete = fn : ''a * ''a list -> ''a list - delete(#"d", explode("abcdefg")); val it = [#"a",#"b",#"c",#"e",#"f",#"g"] : char list - fun insert(x, nil) = [x] = | insert(x, S) = if member(x, S) then S else x::S; val insert = fn : ''a * ''a list -> ''a list - insert(#"a", explode("bcde")); val it = [#"a",#"b",#"c",#"d",#"e"] : char list - val rec delete = fn (_, nil) => nil | (x,y::ys) => if x=y then ys else y::delete(x,ys); stdIn:141.56 Warning: calling polyEqual val delete = fn : ''a * ''a list -> ''a list - delete(3, [1,2,3,4,5]); val it = [1,2,4,5] : int list - val insert = fn (x, nil) => [x] | (x, S) => if member(x, S) then S else x::S; val insert = fn : ''a * ''a list -> ''a list - insert(0, [1,2,3]); val it = [0,1,2,3] : int list - (* 3.3.12 *) - fun insertHead(x, nil) = nil = | insertHead(x, y::ys) = (x::y)::insertHead(x, ys); val insertHead = fn : 'a * 'a list list -> 'a list list - insertHead(1, [[2,3],nil,[2,4,6]]); val it = [[1,2,3],[1],[1,2,4,6]] : int list list - (* 3.3.13 *) - (* http://koko15.hus.osaka-u.ac.jp/members/yoshida/stattext/DraftLisp.html *) - (* 3.3.13 *) - val rec powerSet = fn nil => [nil] | x::xs => powerSet(xs)@insertHead(x, powerSet(xs)); val powerSet = fn : 'a list -> 'a list list - powerSet([1,3,4]); val it = [[],[4],[3],[3,4],[1],[1,4],[1,3],[1,3,4]] : int list list - powerSet([2,5]); val it = [[],[5],[2],[2,5]] : int list list - fun powerSet(nil) = [nil] = | powerSet(x::xs) = = let = val L = powerSet(xs) = in = L@insertHead(x, L) = end; val powerSet = fn : 'a list -> 'a list list - powerSet([2,4,5]); val it = [[],[5],[4],[4,5],[2],[2,5],[2,4],[2,4,5]] : int list list - (* 3.3.14 *) - (* a, [b1, b2, ...] -> (a-b1) * (a-b2) * ... *) - val rec pd1 = fn (_, nil) => 1.0 | (x, y::ys) => (x-y)*pd1(x, ys); val pd1 = fn : real * real list -> real - pd1(10.0, [1.0, 2.0, 3.0]); val it = 504.0 : real - (* [a1,a2,a3,...] -> (a1-a2)*(a1-a3)*...(a2-a3)*...(ai-aj)*... [i 1.0 | x::xs => pd1(x, xs)*prodDiv(xs); val prodDiv = fn : real list -> real - prodDiv([1.0,2.0]); val it = ~1.0 : real - prodDiv([2.2, 1.4, 3.8]); val it = 3.072 : real - (* 3.3.15 *) - val rec isNill = fn nil => true | x::xs => false; val isNill = fn : 'a list -> bool - isNill(nil); val it = true : bool - isNill([1,2,3]); val it = false : bool - null([]); val it = true : bool - null([1,2,3]); val it = false : bool - (* 3.3.16 *) - val rec sumPairs = fn nil => 0 | (x,y)::zs => x + y + sumPairs(zs); val sumPairs = fn : (int * int) list -> int - sumPairs([(1,3),(2,5)]); val it = 11 : int - (* nil => 0 ---> 'a list => int = (x,y)::zs => x + y + sumPairs(zs) = ---> x + y + ...: int = ---> x:int, y:int = ---> fn : (int * int) -> int = *)