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

TSS Chapter #13 Examples in Oz
%%%%%%%%%%%%%%%%%%% The Little Schemer - Chapter - 13 %%%%%%%%%%%%%%%%%%%%%%

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

% 13.1
local Set1 Set2 in
   Set1 = [tomatoes and macaroni]
   Set2 = [macaroni and cheese]
   {Browse 1#{Intersect Set1 Set2}}
end

% 13.4
fun {Intersect_1 Set1 Set2}
   fun {I Set}
      case Set
      of nil then nil
      [] H|T then
         if {Member H Set2}
            then H | {I T}
            else {I T}
         end
      end
   end
in
   {I Set1}
end

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

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

% 13.14
fun {IntersectAll_2 LSet}
   fun {IntersectAll_2 LSet}
      case LSet
      of H|nil then H
      [] H|T then {Intersect H {IntersectAll_2 T}}
      end
   end
in
   case LSet
   of nil then nil
   else {IntersectAll_2 LSet}
   end
end

fun {IntersectAll_3 LSet}
   fun {A LSet}
      case LSet
      of H|nil then H
      [] H|T then {Intersect H {A T}}
      end
   end
in
   case LSet
   of nil then nil
   else {A LSet}
   end
end

% 13.18
local LSet in
   LSet = [[3 mangos and]
           [3 kiwis and]
           [3 hamburgers]]
   {Browse 18#{IntersectAll_3 LSet}}
end

% 13.19
local LSet in
   LSet = [[3 steaks and]
           [no food and]
           [three baked potatoes]
           [3 diet hamburgers]]
   {Browse 19#{IntersectAll_3 LSet}}
end

% 13.20
local LSet in
   LSet = [[3 mangos and]
           nil
           [3 diet hamburgers]]
   {Browse 19#{IntersectAll_3 LSet}}
end

% 13.28
%% Oz does not have letcc - emulate with try-catch???
fun {IntersectAll_5 LSet}
   fun {Hop LSet}
      fun {A LSet}
         case LSet
         of nil|_ then raise hop(nil) end
         [] H|nil then H
         [] H|T then {Intersect_1 H {A T}}
         end
      end
   in
      try
         {A LSet}
      catch hop(E) then
         E
      end
   end
in
   case LSet
   of nil then nil
   else {Hop LSet}
   end
end

% 13.34
local LSet in
   LSet = [[3 mangos and]
           nil
           [3 diet hamburgers]]
   {Browse 34#{IntersectAll_5 LSet}}
end

% 13.58
local LSet in
   LSet = [[3 steaks and]
           [no food and]
           [three baked potatoes]
           [3 diet hamburgers]]
   {Browse 58#{IntersectAll_5 LSet}}
end

% 13.66
local Set1 Set2 in
   Set1 = [three baked potatoes]
   Set2 = [3 diet hamburgers]
   {Browse 66#{Intersect_1 Set1 Set2}}
end

% 13.68
local Set1 Set2 in
   Set1 = [no food an]
   Set2 = nil
   {Browse 68#{Intersect_1 Set1 Set2}}
end

% 13.80
fun {Intersect_2 Set1 Set2}
   fun {I Set1}
      case Set1
      of nil then nil
      [] H|T then
         if {Member H Set2}
            then H | {I T}
            else {I T}
         end
      end
   end
in
   case Set2
   of nil then nil
   else {I Set1}
   end
end

% 13.90
fun {IntersectAll_6 LSet}
   fun {Hop LSet}
      fun {A LSet}
         case LSet
         of nil|_ then raise hop(nil) end
         [] H|nil then H
         [] H|T then {I H {A T}}
         end
      end
      fun {I S1 S2}
         fun {J S1}
            case S1
            of nil then nil
            [] H|T then
               if {Member H S2}
                  then H | {J T}
                  else {J T}
               end
            end
         end
      in
         case S2
         of nil then nil
         else {J S1}
         end
      end
   in
      try
         {A LSet}
      catch hop(E) then
         E
      end
   end
in
   case LSet
   of nil then nil
   else {Hop LSet}
   end
end

% 13.93
fun {IntersectAll_7 LSet}
   fun {Hop LSet}
      fun {A LSet}
         case LSet
         of nil|_ then raise hop(nil) end
         [] H|nil then H
         [] H|T then {I H {A T}}
         end
      end
      fun {I S1 S2}
         fun {J S1}
            case S1
            of nil then nil
            [] H|T then
               if {Member H S2}
                  then H | {J T}
                  else {J T}
               end
            end
         end
      in
         case S2
         of nil then fail
         else {J S1}
         end
      end
   in
      try
         {A LSet}
      catch hop(E) then
         E
      end
   end
in
   case LSet
   of nil then nil
   else {Hop LSet}
   end
end

% 13.94
local LSet in
   LSet = [[3 steaks and]
           [no food and]
           [three baked potatoes]
           [3 diet hamburgers]]
   {Browse 93#{IntersectAll_6 LSet}}
end

% 13.112
fun {Rember L A}
   fun {R L}
      case L
      of nil then nil
      [] H|T then
         if A == H
            then T
            else H|{R T}
         end
      end
   end
in
   {R L}
end

% 13.118
fun {RemberBeyondFirst L A}
   fun {R L}
      case L
      of nil then nil
      [] H|T then
         if H == A
            then nil
            else H|{R T}
         end
      end
   end
in
   {R L}
end

% 13.113
local A Lat in
   A = roots
   Lat = [noodles
          spaghetti spätzle 'bean-thread'
          roots
          potatoes yam
          others
          rice]
   {Browse 113#{RemberBeyondFirst Lat A}}
end

% 13.114
local Lat in
   Lat = [noodles
          spaghetti spätzle 'bean-thread'
          roots
          potatoes yam
          others
          rice]
   {Browse 114#{RemberBeyondFirst Lat others}}
end

% 13.115
local A Lat in
   A = sweetthing
   Lat = [noodles
          spaghetti spätzle 'bean-thread'
          roots
          potatoes yam
          others
          rice]
   {Browse 115#{RemberBeyondFirst Lat A}}
end

% 13.116
local Lat in
   Lat = [cookies
          chocolate mints
            caramel delight ginger snapes
          desserts
          chocolate mousse
          vanilla ice cream
          'German' chocolate cake
          more desserts
          gingerbread chocalate
           chip brownies]
   {Browse 116#{RemberBeyondFirst Lat desserts}}
end

% 13.135
fun {RemberUptoLast L A}
   fun {Skip L}
      fun {R L}
         case L
         of nil then nil
         [] H|T then
            if H == A
               then raise 'skip'(T) end
               else H|{R T}
            end
         end
      end
   in
      try
         {R L}
      catch 'skip'(E) then
         {Skip E}
      end
   end
in
   {Skip L}
end

% 13.119
local A Lat in
   A = roots
   Lat = [noodles
          spaghetti spätzle 'bean-thread'
          roots
          potatoes yam
          others
          rice]
   {Browse 119#{RemberUptoLast Lat A}}
end

% 13.120
local A Lat in
   A = sweetthing
   Lat = [noodles
          spaghetti spätzle 'bean-thread'
          roots
          potatoes yam
          others
          rice]
   {Browse 120#{RemberUptoLast Lat A}}
end

% 13.121
local A Lat in
   A = cookies
   Lat = [cookies
          chocolate mints
            caramel delight ginger snapes
          desserts
          chocolate mousse
          vanilla ice cream
          'German' chocolate cake
          more cookies
          gingerbread chocalate
           chip brownies]
   {Browse 121#{RemberUptoLast Lat A}}
end

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