About TLS The following Oz code is derived from the examples provided in the book:
      "The Little Schemer" by Daniel P. Friedman and Matthias Felleisen.
      http://www.ccs.neu.edu/home/matthias/BTLS/

TLS Chapter #07 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
   else fail
   end
end

%%%%%%%%%%%%%%%%%%% The Little Schemer - Chapter - 7 %%%%%%%%%%%%%%%%%%%%%%

% 7.4
fun {IsSet L}
   case L
   of nil then true
   [] H|T then
      if {Member H T}
         then false
         else {IsSet T}
      end
   end
end

% 7.1
{Browse 1#{IsSet [apple peaches apple plum]}}

% 7.2
local Lat in
   Lat = [apples peaches pears plums]
   {Browse 2#{IsSet Lat}}
end

% 7.3
local Lat in
   Lat = nil
   {Browse 3#{IsSet Lat}}
end

% 7.6
{Browse 6#{IsSet [apple 3 pear 4 9 apple 3 4]}}

% 7.9
fun {MakeSet0 L}
   case L
   of nil then nil
   [] H|T then
      if {Member H T}
         then {MakeSet0 T}
         else H|{MakeSet0 T}
      end
   end
end

% 7.11
local Lat in
   Lat = [apple peach pear peach
          plum apple lemon peach]
   {Browse 11#{MakeSet0 Lat}}
end

% 7.12
fun {MakeSet L}
   case L
   of nil then nil
   [] H|T then H | {MakeSet {MultiRember T H}}
   end
end

% 7.13
local Lat in
   Lat = [apple peach pear peach
          plum apple lemon peach]
   {Browse 13#{MakeSet Lat}}
end

% 7.15
{Browse 15#{MakeSet [apple 3 pear 4 9 apple 3 4]}}

% 7.18
fun {SubSet_ Set1 Set2}
   case Set1
   of nil then true
   [] H|T then
      if {Member H Set2}
         then {SubSet_ T Set2}
         else false
      end
   end
end

% 7.20
fun {SubSet Set1 Set2}
   case Set1
   of nil then true
   [] H|T then {Member H Set2} andthen {SubSet T Set2}
   end
end

% 7.16
local Set1 Set2 in
   Set1 = [5 chicken wings]
   Set2 = [5 hamburgers
           2 pieces fried chicken and
           light duckling wings]
   {Browse 16#{SubSet Set1 Set2}}
end

% 7.17
local Set1 Set2 in
   Set1 = [4 pounds 'of' horseradish]
   Set2 = [4 pounds chicken and
           2 pieces fried chicken and
           5 ounces horseradish]
   {Browse 17#{SubSet Set1 Set2}}
end

% 7.22 - 6.23
fun {EqSet Set1 Set2}
   {SubSet Set1 Set2} andthen {SubSet Set2 Set1}
end

% 7.21
local Set1 Set2 in
   Set1 = [6 large chickens with wings]
   Set2 = [6 chickens with large wings]
   {Browse 21#{EqSet Set1 Set2}}
end

% 7.26 and 6.27
fun {IsIntersect_ Set1 Set2}
   case Set1
   of nil then false
   [] H|T then
      if {Member H Set2}
         then true
         else {IsIntersect_ T Set2}
      end
   end
end

% 7.28
fun {IsIntersect Set1 Set2}
   case Set1
   of nil then false
   [] H|T then {Member H Set2} orelse {IsIntersect T Set2}
   end
end

% 7.25
local Set1 Set2 in
   Set1 = [stewed tomatoes and macaroni]
   Set2 = [macaroni and cheese]
   {Browse 25#{IsIntersect Set1 Set2}}
end

% 7.30
fun {Intersect Set1 Set2}
   case Set1
   of nil then nil
   [] H|T then
      if {Member H Set2}
         then H | {Intersect T Set2}
         else {Intersect T Set2}
      end
   end
end

% 7.29
local Set1 Set2 in
   Set1 = [stewed tomatoes and macaroni]
   Set2 = [macaroni and cheese]
   {Browse 29#{Intersect Set1 Set2}}
end

% 7.32
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

% 7.31
local Set1 Set2 in
   Set1 = [stewed tomatoes and macaroni casserole]
   Set2 = [macaroni and cheese]
   {Browse 31#{Union Set1 Set2}}
end

% 7.33
fun {SetDifference Set1 Set2}
   case Set1
   of nil then nil
   [] H|T then
      if {Member H Set2}
         then {SetDifference T Set2}
         else H|{SetDifference T Set2}
      end
   end
end

% 7.36
fun {IntersectAll LSet}
   case LSet
   of H|nil then H
   [] H|T then {Intersect H {IntersectAll T}}
   end
end

% 7.34
local LSet in
   LSet = [[a b c] [c a d e] [e f g h a b]]
   {Browse 34#{IntersectAll LSet}}
end

% 7.35
local LSet in
   LSet = [[6 pears and]
           [3 peaches and 6 peppers]
           [8 pears and 6 plums]
           [and 6 prunes with some apples]]
   {Browse 35#{IntersectAll LSet}}
end

% 7.41
fun {IsPair P}
   case P
   of _|_|nil then true
   else false
   end
end

% 7.37
{Browse 37#{IsPair [pear pear]}}

% 7.38
{Browse 38#{IsPair [3 7]}}

% 7.39
{Browse 39#{IsPair [[2] [pair]]}}

% 7.40
local L in
   L = [full [house]]
   {Browse 40#{IsPair L}}
end

% 7.47
fun {First P} P.1 end
fun {Second P} P.2.1 end
fun {Build S1 S2} S1|S2|nil end

% 7.48
fun {Third P} P.2.2.1 end

% not defined in book
fun {IsRel L}
   case L
   of nil then true
   [] H|T then {IsSet L} andthen {IsPair H} andthen {IsRel T}
   else false
   end
end
fun {Firsts L}
   case L
   of nil then nil
   [] [H _]|T then H | {Firsts T}
   end
end
fun {Seconds L}
   case L
   of nil then nil
   [] [_ H]|T then H | {Seconds T}
   end
end

% 7.49
local L in
   L = [apples peaches pumpkin pie]
   {Browse 49#{IsRel L}}
end

% 7.50
local L in
   L = [[apples peaches] [pumpkin pie] [apples peaches]]
   {Browse 50#{IsRel L}}
end

% 7.51
local L in
   L = [[apples peaches] [pumpkin pie]]
   {Browse 51#{IsRel L}}
end

% 7.52
local L in
   L = [[4 3] [4 2] [7 6] [6 2] [3 4]]
   {Browse 52#{IsRel L}}
end

% 7.56
fun {IsFun Rel}
   {IsSet {Firsts Rel}}
end

% 7.53
local Rel in
   Rel = [[4 3] [4 2] [7 6] [6 2] [3 4]]
   {Browse 53#{IsFun Rel}}
end

% 7.54
local Rel in
   Rel = [[8 3] [4 2] [7 6] [6 2] [3 4]]
   {Browse 54#{IsFun Rel}}
end

% 7.55
local Rel in
   Rel = [[d 4] [b 0] [b 9] [e 5] [g 4]]
   {Browse 55#{IsFun Rel}}
end

% 7.60 and 6.61
fun {RevRel Rel}
   case Rel
   of nil then nil
   [] [X Y]|T then [Y X]| {RevRel T}
   end
end

% 7.59
local Rel in
   Rel = [[8 a] [pumpkin pie] [got sick]]
   {Browse 59#{RevRel Rel}}
end

% 7.62
fun {RevPair Pair}
   {Build {Second Pair} {First Pair}}
end

% 7.67
fun {IsFullFun Fun}
   {IsSet {Seconds Fun}}
end

% 7.63
local Fun in
   Fun = [[8 3] [4 2] [7 6] [6 2] [3 4]]
   {Browse 63#{IsFullFun Fun}}
end

% 7.64
local Fun in
   Fun = [[8 3] [4 8] [7 6] [6 2] [3 4]]
   {Browse 64#{IsFullFun Fun}}
end

% 7.65
local Fun in
   Fun = [[grape raisin]
          [plum prune]
          [stewed prune]]
   {Browse 65#{IsFullFun Fun}}
end

% 7.66
local Fun in
   Fun = [[grape raisin]
          [plum prune]
          [stewed grape]]
   {Browse 66#{IsFullFun Fun}}
end

% 7.70
fun {OneToOne Fun}
   {IsFun {RevRel Fun}}
end

% 7.71
{Browse 71#{OneToOne [[chocolate chip] [doughy cookie]]}}

Chris Rathman / Chris.Rathman@tx.rr.com