TSS Chapter #12 Examples in Oz % Defined in previous chapters fun {MultiRember L A} case L of nil then nil [] H|T then if A == H then {MultiRember T A} else H|{MultiRember T A} end end end Y = fun {$ Le} {fun {$ F} {F F} end fun {$ F} {Le fun {$ X} {{F F} X} end} end} end fun {Add1 N} N + 1 end fun {IsSet L} case L of nil then true [] H|T then if {Member H T} then false else {IsSet T} end end end %%%%%%%%%%%%%%%%%%% The Little Schemer - Chapter - 12 %%%%%%%%%%%%%%%%%%%%%% % 12.4 fun {MultiRemberY L A} {{Y fun {$ Mr} fun {$ L} case L of nil then nil [] H|T then if A == H then {Mr T} else H|{Mr T} end end end end} L} end % 12.1 local A Lat in A = tuna Lat = [shrimp salad tuna salad and tuna] {Browse 1#{MultiRemberY Lat A}} end % 12.5 fun {Length_} {fun {$ Le} {fun {$ F} {F F} end fun {$ F} {Le fun {$ X} {{F F} X} end} end} end fun {$ Length} fun {$ L} case L of nil then 0 [] _|T then {Add1 {Length T}} end end end} end fun {LengthY} {Y fun {$ Length} fun {$ L} case L of nil then 0 [] _|T then {Add1 {Length T}} end end end} end {Browse 5#{{LengthY} [shrimp salad tuna salad]}} % 12.8 fun {MultiRember_1 L A} fun {Mr L} case L of nil then nil [] H|T then if H == A then {Mr T} else H|{Mr T} end end end in {Mr L} end {Browse 8#{MultiRember_1 [shrimp salad tuna salad and tuna] tuna}} % 12.40 fun {RemberF Test} fun {$ L A} case L of nil then nil [] H|T then if {Test A H} then T else H|{{RemberF Test} T A} end end end end % 12.41 RemberEq = {RemberF fun {$ X Y} X == Y end} % 12.43 fun {MultiRemberF Test} fun {$ L A} case L of nil then nil [] H|T then if {Test A H} then {{MultiRemberF Test} T A} else H|{{MultiRemberF Test} T A} end end end end % 12.47 fun {MultiRemberF_1 Test} fun {Mf L A} case L of nil then nil [] H|T then if {Test A H} then {Mf T A} else H|{Mf T A} end end end in Mf end % 12.49 local Test in Test = fun {$ X Y} X == Y end {Browse 49#{MultiRemberF_1 Test}} end % 12.52 fun {MultiRember_2} fun {MultiRember_2 L A} case L of nil then nil [] H|T then if A == H then {MultiRember_2 T A} else H|{MultiRember_2 T A} end end end in MultiRember_2 end {Browse 52#{{MultiRember_2} [shrimp salad tuna salad and tuna] tuna}} % 12.54 fun {IsMember A L} case L of nil then false [] H|T then if A == H then true else {IsMember A T} end end end % 12.55 local A Lat in A = ice Lat = [salad greens with pears brie cheese frozen yogurt] {Browse 55#{IsMember A Lat}} end % 12.57 fun {IsMember_1 A L} fun {IsYes L} case L of nil then false [] H|T then if A == H then true else {IsMember_1 A T} end end end in {IsYes L} end % 12.59 {Browse 59#{IsSet [tomatoes and macaroni]}} {Browse 59#{IsSet [macaroni and cheese]}} % 12.61 fun {Union Set1 Set2} case Set1 of nil then Set2 [] H|T then if {Member H Set2} then {Union T Set2} else H|{Union T Set2} end end end % 12.60 local Set1 Set2 in Set1 = [tomatoes and macaroni casserole] Set2 = [macaroni and cheese] {Browse 60#{Union Set1 Set2}} end % 12.63 fun {Union_1 Set1 Set2} fun {U Set} case Set of nil then Set2 [] H|T then if {Member H Set2} then {U T} else H|{U T} end end end in {U Set1} end % 12.64 fun {Union_2 Set1 Set2} fun {A Set} case Set of nil then Set2 [] H|T then if {Member H Set2} then {A T} else H|{A T} end end end in {A Set1} end % 12.74 fun {IsMember_2 L A} case L of nil then false [] H|T then if A == H then true else {IsMember_2 T A} end end end % 12.84 fun {Union_3 Set1 Set2} fun {U Set} case Set of nil then Set2 [] H|T then if {IsMember H Set2} then {U T} else H|{U T} end end end fun {IsMember A L} case L of nil then false [] H|T then if A == H then true else {IsMember A T} end end end in {U Set1} end % 12.86 fun {Union_4 Set1 Set2} fun {U Set} case Set of nil then Set2 [] H|T then if {M H Set2} then {U T} else H|{U T} end end end fun {M A L} case L of nil then false [] H|T then if A == H then true else {M A T} end end end in {U Set1} end % 12.91 fun {Union_5 Set1 Set2} fun {U Set} case Set of nil then Set2 [] H|T then if {M H Set2} then {U T} else H|{U T} end end end fun {M A L} fun {N L} case L of nil then false [] H|T then if A == H then true else {N T} end end end in {N L} end in {U Set1} end % 12.100 fun {TwoInARow L} fun {W L A} case L of nil then false [] H|T then H == A orelse {W T H} end end in case L of nil then false [] H|T then {W T H} end end % 12.104 fun {SumOfPrefixes Tup} fun {S Tup Sonssf} case Tup of nil then nil [] H|T then (Sonssf + H) | {S T Sonssf+H} end end in {S Tup 0} end % 12.106 fun {Scramble Tup} fun {P Tup Rp} case Tup of nil then nil [] H|T then {Nth H|Rp H} | {P T H|Rp} end end in {P Tup nil} end |