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 #14 Examples in Oz
% Defined in previous chapters
fun {IsAtomS X}
   if {IsAtom X} andthen {Not X == nil}
      then true
      else {IsNumber X}
   end
end
fun {EqList L1 L2}
   case L1#L2
   of nil#nil then true
   [] nil#_ then false
   [] _#nil then false
   [] (H1|T1)#(H2|T2) then
      if {IsAtomS H1} andthen {IsAtomS H2}
         then H1 == H2 andthen {EqList T1 T2}
         else {EqList H1 H2} andthen {EqList T1 T2}
      end
   else false
   end
end
fun {Add1 N} N + 1 end

%%%%%%%%%%%%%%%%%%% The Little Schemer - Chapter - 14 %%%%%%%%%%%%%%%%%%%%%%

% 14.2
fun {LeftMost L}
   case L
   of H|_ then
      if {IsAtomS H}
         then H
         else {LeftMost H}
      end
   end
end

% 14.3
local L in
   L = [[[a] b] [c d]]
   {Browse 3#{LeftMost L}}
end

% 14.4
local L in
   L = [[[a] nil] nil [e]]
   {Browse 4#{LeftMost L}}
end

% 14.5
local L in
   L = [[[nil a] nil]]
   try
      {Browse 5#{LeftMost L}}
   catch _ then
      skip
   end
end

% 14.23
fun {LeftMost_1 L}
   case L
   of nil then nil
   [] H|T then
      if {IsAtomS H}
         then H
         else
            if {IsAtomS {LeftMost_1 H}}
               then {LeftMost_1 H}
               else {LeftMost_1 T}
            end
      end
   end
end

% 14.14
local L in
   L = [[[nil a] nil]]
   {Browse 14#{LeftMost_1 L}}
end

% 14.17
{Browse 17#{LeftMost_1 nil}}

% 14.24
local L in
   L = [[[a] b] [c d]]
   {Browse 24#{LeftMost_1 L}}
end

% 14.25
local L in
   L = [[[a] nil] nil [e]]
   {Browse 25#{LeftMost_1 L}}
end

% 14.26
local L in
   L = [[[nil a] nil]]
   {Browse 26#{LeftMost_1 L}}
end

% 14.23
fun {LeftMost_2 L}
   case L
   of nil then nil
   [] H|T then
      if {IsAtomS H}
         then H
         else
            local A = {LeftMost_2 H} in
               if {IsAtomS A}
                  then A
                  else {LeftMost_2 T}
               end
            end
      end
   end
end

% 14.37
fun {Rember1Star L A}
   case L
   of nil then nil
   [] H|T then
      if {IsAtomS H}
         then
            if H == A
               then T
               else H|{Rember1Star T A}
            end
         else
            if {EqList H {Rember1Star H A}}
               then H|{Rember1Star T A}
               else {Rember1Star H A}|T
            end
      end
   end
end
fun {Rember1Star_1 L A}
   fun {R L}
      case L
      of nil then nil
      [] H|T then
         if {IsAtomS H}
            then
               if H == A
                  then T
                  else H|{R T}
               end
            else
               if {EqList H {R H}}
                  then H|{R T}
                  else {R H}|T
               end
         end
      end
   end
in
   {R L}
end

% 14.35
local A L in
   A = salad
   L = [['Swedish' rye]
        ['French' [mustard salad turkey]]
        salad]
   {Browse 35#{Rember1Star_1 L A}}
end

% 14.36
local A L in
   A = meat
   L = [[pasta meat]
        pasta
        [noodle meat sauce]
        meat tomatoes]
   {Browse 36#{Rember1Star_1 L A}}
end

% 14.43
fun {Rember1Star_2 L A}
   fun {R L}
      case L
      of nil then nil
      [] H|T then
         if {IsAtomS H}
            then
               if H == A
                  then T
                  else H|{R T}
               end
            else
               local Av = {R H} in
                  if {EqList H Av}
                     then H|{R T}
                     else Av|T
                  end
               end
         end
      end
   end
in
   {R L}
end

% 14.49
fun {DepthStar L}
   case L
   of nil then 1
   [] H|T then
      if {IsAtomS H}
         then {DepthStar T}
         else
            if {DepthStar T} > {Add1 {DepthStar H}}
               then {DepthStar T}
               else {Add1 {DepthStar H}}
            end
      end
   end
end

% 14.50
local L in
   L = [[pickled] peppers [peppers pickled]]
   {Browse 50#{DepthStar L}}
end

% 14.51
local L in
   L = [margarine [[bitter butter] [makes] [batter [bitter]]] butter]
   {Browse 51#{DepthStar L}}
end

% 14.52
local L in
   L = [c [b [a b] a] a]
   {Browse 52#{DepthStar L}}
end

% 14.56
fun {DepthStar_1 L}
   local A D in
      A = {Add1 {DepthStar_1 L.1}}
      D = {DepthStar_1 L.2}
      case L
      of nil then 1
      [] H|T then
         if {IsAtomS H}
            then D
            else
               if D > A
                  then D
                  else A
               end
         end
      end
   end
end

% 14.58
local L in
   L = [nil
        [[bitter butter]
         [makes]
         [batter [bitter]]]
        butter]
   try
      {Browse 58#{DepthStar_1 L}}
   catch _ then
      skip
   end
end

% 14.66
fun {DepthStar_2 L}
   case L
   of nil then 1
   [] H|T then
      if {IsAtomS H}
         then {DepthStar_2 T}
         else
            local A D in
               A = {Add1 {DepthStar_2 H}}
               D = {DepthStar_2 T}
               if D > A
                  then D
                  else A
               end
            end
      end
   end
end

% 14.72
fun {DepthStar_3 L}
   case L
   of nil then 1
   [] H|T then
      local D in
         D = {DepthStar_3 T}
         if {IsAtomS H}
            then {DepthStar_3 T}
            else
               if D > {Add1 {DepthStar_3 H}}
                  then D
                  else {Add1 {DepthStar_3 H}}
               end
         end
      end
   end
end

% 14.73
fun {DepthStar_4 L}
   case L
   of nil then 1
   [] H|T then
      local D = {DepthStar_4 T} in
         if {IsAtomS H}
            then D
            else
               local A = {Add1 {DepthStar_4 H}} in
                  if D > A
                     then D
                     else A
                  end
               end
         end
      end
   end
end

% 14.82
% Oz doesn't have if shortcut used in this example

% 14.86
fun {DepthStar_5 L}
   case L
   of nil then 1
   [] H|T then
      if {IsAtomS H}
         then {DepthStar_5 T}
         else
            local A D in
               A = {Add1 {DepthStar_5 H}}
               D = {DepthStar_5 T}
               {Max A D}
            end
      end
   end
end
fun {DepthStar_6 L}
   case L
   of nil then 1
   [] H|T then
      if {IsAtomS H}
         then {DepthStar_6 T}
         else {Max {Add1 {DepthStar_6 H}} {DepthStar_6 T}}
      end
   end
end

% 14.87
fun {Scramble Tup}
   fun {P Tup Rp}
      case Tup
      of nil then nil
      [] H|T then
         local Rp = H|Rp in
            {Nth Rp H} | {P T Rp}
         end
      end
   end
in
   {P Tup nil}
end

% 14.91
fun {LeftMost_3 L}
   case L
   of nil then nil
   [] H|T then
      if {IsAtomS H}
         then H
         else
            local A = {LeftMost_3 H} in
               if {IsAtomS A}
                  then A
                  else {LeftMost_3 T}
               end
            end
      end
   end
end

% 14.92
local L in
   L = [[[a]] b [c]]
   {Browse 92#{LeftMost_3 L}}
end

% 14.104
fun {LeftMost_4 L}
   fun {Skip}
      try
         {Lm L 'skip'}
      catch 'skip'(E) then
          E
      end
   end
in
   {Skip}
end
fun {Lm L Out}
   case L
   of nil then nil
   [] H|T then
      if {IsAtomS H}
         then raise Out(H) end
         else
            _ = {Lm H Out}
            {Lm T Out}
      end
   end
end

% 14.108
local L in
   L = [[[a]] b [c]]
   {Browse 108#{LeftMost_4 L}}
end

% 14.120
fun {LeftMost_5 L}
   fun {Lm L Out}
      case L
      of nil then nil
      [] H|T then
         if {IsAtomS H}
            then raise Out(H) end
            else
               _ = {Lm H Out}
               {Lm T Out}
         end
      end
   end
   fun {Skip}
      try
         {Lm L 'skip'}
      catch 'skip'(E) then
          E
      end
   end
in
   {Skip}
end

% 14.121
fun {LeftMost_6 L}
   fun {Skip}
      fun {Lm L Out}
         case L
         of nil then nil
         [] H|T then
            if {IsAtomS H}
               then raise Out(H) end
               else
                  _ = {Lm H Out}
                  {Lm T Out}
            end
         end
      end
   in
      try
         {Lm L 'skip'}
      catch 'skip'(E) then
          E
      end
   end
in
   {Skip}
end

% 14.124
fun {LeftMost_7 L}
   fun {Skip}
      fun {Lm L Skip}
         case L
         of nil then nil
         [] H|T then
            if {IsAtomS H}
               then raise Skip(H) end
               else
                  _ = {Lm H Skip}
                  {Lm T Skip}
            end
         end
      end
   in
      try
         {Lm L 'skip'}
      catch 'skip'(E) then
          E
      end
   end
in
   {Skip}
end

% 14.125
fun {LeftMost_8 L}
   fun {Skip}
      fun {Lm L}
         case L
         of nil then nil
         [] H|T then
            if {IsAtomS H}
               then raise 'skip'(H) end
               else
                  _ = {Lm H}
                  {Lm T}
            end
         end
      end
   in
      try
         {Lm L}
      catch 'skip'(E) then
          E
      end
   end
in
   {Skip}
end

% 14#143
fun {Rm L A Oh}
   case L
   of nil then raise Oh(no) end
   [] H|T then
      if {IsAtomS H}
         then
            if H == A
               then T
               else H|{Rm T A Oh}
            end
         else
            local X in
               X =
                  try
                     {Rm H A oh}
                  catch oh(E) then
                     H
                  end
               if {IsAtomS X}
                  then H|{Rm T A Oh}
                  else {Rm H A Oh}|T
               end
            end
      end
   end
end

% 14.146
local A L in
   A = noodles
   L = [[food] more [food]]
   {Browse 146#try {Rm L A say} catch say(E) then E end}
end

% 14.155
fun {Rember1Star_3 L A} X in
   X =
      try
         {Rm L A say}
      catch say(E) then
         E
     end
   if {IsAtomS X}
      then L
      else {Rm L A nil}
   end
end

% 14.157
fun {Rember1Star_4 L A} X in
   X =
      try
         {Rm_1 L A say}
      catch say(E) then
         E
     end
   if {IsAtomS X}
      then L
      else X
   end
end
fun {Rm_1 L A Oh}
   case L
   of nil then raise Oh(no) end
   [] H|T then
      if {IsAtomS H}
         then
            if H == A
               then T
               else H|{Rm_1 T A Oh}
            end
         else
            local X in
               X =
                  try
                     {Rm_1 H A oh}
                  catch oh(E) then
                     E
                  end
               if {IsAtomS X}
                  then H|{Rm_1 T A Oh}
                  else X|T
               end
            end
      end
   end
end

% 14.161
fun {Rember1Star_5 L A}
   try
      {Rm_2 L A say}
   catch say(E) then
      L
   end
end

% 14.163
fun {Rm_2 L A Oh}
   case L
   of nil then raise Oh(no) end
   [] H|T then
      if {IsAtomS H}
         then
            if H == A
               then T
               else H|{Rm_2 T A Oh}
            end
         else
            try
               {Rm_2 H A oh}|T
            catch oh(_) then
               H|{Rm_2 T A Oh}
            end
      end
   end
end

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