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

Chapter #8 Examples in Oz
% Defined in previous chapters
fun {EqInt X Y} X == Y end

%%%%%%%%%%%%%%%%%%% Chapter - 8 %%%%%%%%%%%%%%%%%%%%%%

% 8.3
fun {EqOrangeOrApple X Y}
   case X#Y
   of orange#orange then true
   [] apple#apple then true
   [] _#_ then false
   end
end

% 8.4
fun {SubstituteOrangeOrApple N A L}
   case L
   of empty then empty
   [] cons(E T) then
      if {EqOrangeOrApple A E}
         then cons(N {SubstituteOrangeOrApple N A T})
         else cons(E {SubstituteOrangeOrApple N A T})
      end
   end
end

% 8.9
fun {Substitute Relation N A L}
   case L
   of empty then empty
   [] cons(E T) then
      if {Relation A E}
         then cons(N {Substitute Relation N A T})
         else cons(E {Substitute Relation N A T})
      end
   end
end

% 8.22
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 22#{Substitute EqInt 11 15 L}}
end

% 8.24
fun {LessThan X Y} X < Y end
{Browse 24#{LessThan 15 17}}

% 8.27
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 27#{Substitute LessThan 11 15 L}}
end

% 8.33
fun {InRange Small#Large X}
   if {LessThan Small X}
      then {LessThan X Large}
      else false
   end
end

% 8.29
{Browse 29#{InRange 11#16 15}}

% 8.31
{Browse 31#{InRange 11#15 15}}
{Browse 31#{InRange 15#22 15}}

% 8.36
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 36#{Substitute InRange 22 11#16 L}}
end

% 8.40
fun {SubstituteUsingAPredicate Predicate N L}
   case L
   of empty then empty
   [] cons(E T) then
      if {Predicate E}
         then cons(N {SubstituteUsingAPredicate Predicate N T})
         else cons(E {SubstituteUsingAPredicate Predicate N T})
      end
   end
end

% 8.48
fun {Is15 N}
   {EqInt N 15}
end

% 8.49
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 49#{SubstituteUsingAPredicate Is15 11 L}}
end

% 8.52
fun {LessThan15 N}
   {LessThan N 15}
end

% 8.51
{Browse 51#{LessThan15 11}}

% 8.55
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 55#{SubstituteUsingAPredicate LessThan15 11 L}}
end

% 8.59
fun {InRange_11_16 N}
   if {LessThan 11 N}
      then {LessThan N 16}
      else false
   end
end

% 8.57
{Browse 57#{InRange_11_16 15}}

% 8.62
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 62#{SubstituteUsingAPredicate InRange_11_16 22 L}}
end

% 8.65
fun {InRangeC Small#Large}
   fun {$ X}
      if {LessThan Small X}
         then {LessThan X Large}
         else false
      end
   end
end

% 8.70
{Browse 70#{InRangeC 11#16}}

% 8.71
fun {InRangeC_11_16 N}
   if {LessThan 11 N}
      then {LessThan N 16}
      else false
   end
end

% 8.76
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 76#{SubstituteUsingAPredicate {InRangeC 11#16} 22 L}}
end


% 8.77
local L in
   L = cons(15 cons(6 cons(15 cons(17 cons(15 cons(8 empty))))))
   {Browse 77#{SubstituteUsingAPredicate {InRangeC 3#16} 22 L}}
end

% 8.79
fun {SubstituteC Predicate}
   fun {$ N L}
      case L
      of empty then empty
      [] cons(E T) then
         if {Predicate E}
            then cons(N {SubstituteUsingAPredicate Predicate N T})
            else cons(E {SubstituteUsingAPredicate Predicate N T})
         end
      end
   end
end

% 8.84
{Browse 84#{SubstituteC {InRangeC 11#16}}}

% 8.85
{Browse 85#{SubstituteC InRangeC_11_16}}

% 8.86
fun {SubstituteCInRange_11_16 N L}
   case L
   of empty then empty
   [] cons(E T) then
      if {InRange_11_16 E}
         then cons(N {SubstituteCInRange_11_16 N T})
         else cons(E {SubstituteCInRange_11_16 N T})
      end
   end
end

% 8.88
fun {Combine_ X Y}
   case X#Y
   of empty#empty then empty
   [] empty#cons(B L2) then cons(B L2)
   [] cons(A L1)#empty then cons(A L1)
   [] cons(A L1)#cons(B L2) then cons(A {Combine_ L1 cons(B L2)})
   end
end
fun {Combine X Y}
   case X#Y
   of empty#L2 then L2
   [] cons(A L1)#L2 then cons(A {Combine L1 L2})
   end
end

% 8.90
local L1 L2 in
   L1 = cons(1 cons(2 cons(3 empty)))
   L2 = cons(5 cons(4 cons(7 cons(9 empty))))
   {Browse 90#{Combine L1 L2}}
end

% 8.91
local L1 L2 in
   L1 = cons(1 cons(2 cons(3 empty)))
   L2 = cons(12 cons(11 cons(5 cons(5 empty))))
   {Browse 91#{Combine L1 L2}}
end

% 8.93
fun {CombineC X}
   fun {$ Y}
      case X#Y
      of empty#L2 then L2
      [] cons(A L1)#L2 then cons(A {Combine L1 L2})
      end
   end
end

% 8.94
{Browse 94#{CombineC cons(1 cons(2 cons(3 empty)))}}

% 8.95
fun {Prefixer_123 L2}
   cons(1 cons(2 cons(3 L2)))
end

% 8.97
fun {WaitingPrefixer_123 L2}
   cons(1 {{CombineC cons(2 cons(3 L2))} L2})
end

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