Chapter #5 Examples in Oz
%%%%%%%%%%%%%%%%%%% Chapter - 5 %%%%%%%%%%%%%%%%%%%%%%
% 5.4
{Browse 4#topping(anchovy topping(tuna topping(anchovy bottom)))}
% 5.5
{Browse 5#topping(tuna topping(anchovy bottom))}
% 5.6
{Browse 6#topping(anchovy bottom)}
% 5.7
{Browse 7#bottom}
% 5.11
fun {RemoveAnchovy P}
case P
of bottom then bottom
[] topping(anchovy X) then {RemoveAnchovy X}
[] topping(tuna X) then topping(tuna {RemoveAnchovy X})
[] topping(lox X) then topping(lox {RemoveAnchovy X})
end
end
% 5.8
{Browse 8#{RemoveAnchovy topping(lox topping(anchovy topping(tuna topping(anchovy bottom))))}}
% 5.9
{Browse 9#{RemoveAnchovy topping(lox topping(tuna bottom))}}
% 5.13
fun {RemoveAnchovy_ P}
case P
of bottom then bottom
[] topping(anchovy X) then {RemoveAnchovy_ X}
[] topping(T X) then topping(T {RemoveAnchovy_ X})
end
end
% 5.14
fun {RemoveTuna P}
case P
of bottom then bottom
[] topping(anchovy X) then topping(anchovy {RemoveTuna X})
[] topping(tuna X) then {RemoveTuna X}
[] topping(lox X) then topping(lox {RemoveTuna X})
end
end
% 5.21
fun {RemoveTuna_ P}
case P
of bottom then bottom
[] topping(anchovy X) then topping(anchovy {RemoveTuna_ X})
[] topping(tuna X) then {RemoveTuna_ X}
[] topping(T X) then topping(T {RemoveTuna_ X})
end
end
% 5.28
fun {RemoveFish1 F P}
case F#P
of _#bottom then bottom
[] tuna#topping(tuna X) then {RemoveFish1 tuna X}
[] tuna#topping(T X) then topping(T {RemoveFish1 tuna X})
[] anchovy#topping(anchovy X) then {RemoveFish1 anchovy X}
[] anchovy#topping(T X) then topping(T {RemoveFish1 anchovy X})
[] lox#topping(lox X) then {RemoveFish1 lox X}
[] lox#topping(T X) then topping(T {RemoveFish1 lox X})
end
end
% 5.30
fun {RemoveFish2 F P}
case F#P
of _#bottom then bottom
[] tuna#topping(tuna X) then {RemoveFish2 tuna X}
[] tuna#topping(anchovy X) then topping(anchovy {RemoveFish2 tuna X})
[] tuna#topping(lox X) then topping(lox {RemoveFish2 tuna X})
[] anchovy#topping(tuna X) then topping(tuna {RemoveFish2 anchovy X})
[] anchovy#topping(anchovy X) then {RemoveFish2 anchovy X}
[] anchovy#topping(lox X) then topping(lox {RemoveFish2 anchovy X})
[] lox#topping(tuna X) then topping(tuna {RemoveFish2 lox X})
[] lox#topping(anchovy X) then topping(anchovy {RemoveFish2 lox X})
[] lox#topping(lox X) then {RemoveFish2 lox X}
end
end
% 5.35
fun {RemoveFish3 F P}
case P
of bottom then bottom
[] topping(T X) then
if T == F
then {RemoveFish3 F X}
else topping(T {RemoveFish3 F X})
end
end
end
% 5.38
fun {EqFish_ X Y}
case X#Y
of anchovy#anchovy then true
[] anchovy#tuna then false
[] anchovy#lox then false
[] tuna#anchovy then false
[] tuna#tuna then true
[] tuna#lox then false
[] lox#anchovy then false
[] lox#tuna then false
[] lox#lox then true
end
end
fun {EqFish X Y}
case X#Y
of anchovy#anchovy then true
[] tuna#tuna then true
[] lox#lox then true
[] _#_ then false
end
end
% 5.39
{Browse 39#{EqFish anchovy anchovy}}
% 5.40
fun {RemoveFish F P}
case P
of bottom then bottom
[] topping(T X) then
if {EqFish T F}
then {RemoveFish F X}
else topping(T {RemoveFish F X})
end
end
end
% 5.44
{Browse 44#{RemoveFish anchovy topping(anchovy bottom)}}
% 5.48
{Browse 48#{RemoveFish tuna topping(anchovy topping(tuna topping(anchovy bottom)))}}
% 5.49
{Browse 49#{EqFish anchovy tuna}}
% 5.50
{Browse 50#topping(anchovy {RemoveFish tuna topping(tuna topping(anchovy bottom))})}
% 5.51
{Browse 51#{RemoveFish tuna topping(tuna topping(anchovy bottom))}}
% 5.53
{Browse 53#{RemoveFish tuna topping(anchovy bottom)}}
% 5.57
fun {EqInt X Y} X == Y end
fun {RemoveInt I P}
case P
of bottom then bottom
[] topping(T X) then
if {EqInt T I}
then {RemoveInt I X}
else topping(T {RemoveInt I X})
end
end
end
% 5.55
{Browse 55#{RemoveInt 3 topping(2 topping(3 topping(2 bottom)))}}
% 5.66
fun {SubstituteFish N A P}
case P
of bottom then bottom
[] topping(T X) then
if {EqFish T A}
then topping(N {SubstituteFish N A X})
else topping(T {SubstituteFish N A X})
end
end
end
fun {SubstituteInt N A P}
case P
of bottom then bottom
[] topping(T X) then
if {EqFish T A}
then topping(N {SubstituteInt N A X})
else topping(T {SubstituteInt N A X})
end
end
end
% 5.60
{Browse 60#{SubstituteFish lox anchovy topping(anchovy topping(tuna topping(anchovy bottom)))}}
% 5.63
{Browse 63#{SubstituteInt 5 3 topping(3 topping(2 topping(3 bottom)))}}
% 5.67
{Browse 67#{EqInt 17 0}}
% 5.68
{Browse 68#{EqInt 17 tuna}}
% 5.70
fun {EqNum_ X Y}
case X#Y
of zero#zero then true
[] one_more_than(N)#zero then false
[] zero#one_more_than(M) then false
[] one_more_than(N)#one_more_than(M) then {EqNum_ N M}
end
end
% 5.71
fun {EqNum X Y}
case X#Y
of zero#zero then true
[] one_more_than(N)#one_more_than(M) then {EqNum N M}
[] _#_ then false
end
end
% 5.69
{Browse 69#{EqNum one_more_than(zero) one_more_than(zero)}}
|