Chapter #2 Examples in Oz
% Defined in previous chapters
class Integer feat X meth init(Xi) self.X = Xi end end
class NumD end
class Zero from NumD meth init skip end end
class OneMoreThan from NumD
feat Predecessor
meth init(P)
self.Predecessor = P
end
end
%%%%%%%%%%%%%%%%%%% Chapter - 2 %%%%%%%%%%%%%%%%%%%%%%
% 2.7 | 2.136
class PointD
meth distanceTo0(?$)
raise abstract() end
end
meth closerTo0(P ?$)
{self distanceTo0($)} =< {P distanceTo0($)}
end
end
class CartesianPt from PointD
feat X Y
meth init(Xi Yi)
self.X = Xi
self.Y = Yi
end
meth distanceTo0(?$)
{FloatToInt {Sqrt {IntToFloat self.X*self.X + self.Y*self.Y}}}
end
end
class ManhattanPt from PointD
feat X Y
meth init(Xi Yi)
self.X = Xi
self.Y = Yi
end
meth distanceTo0(?$)
self.X + self.Y
end
end
% 2.3
{Browse 3#{New ManhattanPt init(3 4)}}
% 2.4
{Browse 4#{New CartesianPt init(3 4)}}
% 2.12
{Browse 12#{{New ManhattanPt init(3 4)} distanceTo0($)}}
% 2.14
{Browse 14#{{New CartesianPt init(3 4)} distanceTo0($)}}
% 2.17 | 2.29 | 2.72 | 2.79
class ShishD
meth onlyOnions(?$)
raise abstract() end
end
meth isVegetarian(?$)
raise abstract() end
end
end
class Skewer from ShishD
meth init skip end
meth onlyOnions(?$) true end
meth isVegetarian(?$) true end
end
class Onion from ShishD
feat Shish
meth init(S) self.Shish = S end
meth onlyOnions(?$) {self.Shish onlyOnions($)} end
meth isVegetarian(?$) {self.Shish isVegetarian($)} end
end
class Lamb from ShishD
feat Shish
meth init(S) self.Shish = S end
meth onlyOnions(?$) false end
meth isVegetarian(?$) false end
end
class Tomato from ShishD
feat Shish
meth init(S) self.Shish = S end
meth onlyOnions(?$) false end
meth isVegetarian(?$) {self.Shish isVegetarian($)} end
end
% 2.19
{Browse 19#{New Skewer init}}
% 2.20
{Browse 20#{New Onion init({New Skewer init})}}
% 2.21
{Browse 43#{New Onion init(
{New Lamb init(
{New Onion init(
{New Skewer init})})})}}
% 2.22
{Browse 22#{{New Skewer init} onlyOnions($)}}
% 2.23
{Browse 23#{{New Onion init({New Skewer init})} onlyOnions($)}}
% 2.24
{Browse 24#{{New Lamb init({New Skewer init})} onlyOnions($)}}
% 2.25
{Browse 25#{{New Onion init(
{New Onion init(
{New Onion init(
{New Skewer init})})})} onlyOnions($)}}
% 2.26
{Browse 26#{{New Onion init(
{New Lamb init(
{New Onion init(
{New Skewer init})})})} onlyOnions($)}}
% 2.36
{Browse 36#{{New Onion init(
{New Onion init(
{New Skewer init})})} onlyOnions($)}}
% 2.55
{Browse 55#{{New Onion init(
{New Lamb init(
{New Skewer init})})} onlyOnions($)}}
% 2.67
{Browse 67#{New Tomato init({New Skewer init})}}
% 2.68
{Browse 68#{New Onion init(
{New Tomato init(
{New Skewer init})})}}
% 2.70
{Browse 70#{{New Tomato init(
{New Onion init(
{New Tomato init(
{New Skewer init})})})} isVegetarian($)}}
% 2.71
{Browse 71#{{New Onion init(
{New Onion init(
{New Onion init(
{New Skewer init})})})} isVegetarian($)}}
% 2.80 | 2.90 | 2.116
class KebabD
meth isVeggie(?$)
raise abstract() end
end
meth whatHolder
raise abtract() end
end
end
class Holder from KebabD
feat Obj
meth init(O) self.Obj = O end
meth isVeggie(?$) true end
meth whatHolder(?$) self.Obj end
end
class Shallot from KebabD
feat Kebab
meth init(K) self.Kebab = K end
meth isVeggie(?$) {self.Kebab isVeggie($)} end
meth whatHolder(?$) {self.Kebab whatHolder($)} end
end
class Shrimp from KebabD
feat Kebab
meth init(K) self.Kebab = K end
meth isVeggie(?$) false end
meth whatHolder(?$) {self.Kebab whatHolder($)} end
end
class Radish from KebabD
feat Kebab
meth init(K) self.Kebab = K end
meth isVeggie(?$) {self.Kebab isVeggie($)} end
meth whatHolder(?$) {self.Kebab whatHolder($)} end
end
% 2.82
class RodD end
class Dagger from RodD meth init skip end end
class Sabre from RodD meth init skip end end
class Sword from RodD meth init skip end end
% 2.83
class PlateD end
class Gold from PlateD meth init skip end end
class Silver from PlateD meth init skip end end
class Brass from PlateD meth init skip end end
class Copper from PlateD meth init skip end end
class Wood from PlateD meth init skip end end
% 2.84 | 2.92
{Browse 84#{New Shallot init(
{New Radish init(
{New Holder init(
{New Dagger init})})})}}
% 2.85 | 2.91
{Browse 85#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Dagger init})})})} isVeggie($)}}
% 2.86 | 2.94
{Browse 86#{New Shallot init(
{New Radish init(
{New Holder init(
{New Gold init})})})}}
% 2.87 | 2.93
{Browse 87#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Gold init})})})} isVeggie($)}}
% 2.95
{Browse 95#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Integer init(52)})})})} isVeggie($)}}
% 2.96
{Browse 96#{{New Shallot init(
{New Radish init(
{New Holder init(
{New OneMoreThan init(
{New Zero init})})})})} isVeggie($)}}
% 2.97
class Boolean feat X meth init(Xi) self.X = Xi end end
{Browse 97#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Boolean init(false)})})})} isVeggie($)}}
% 2.99
{Browse 99#{New Shallot init(
{New Radish init(
{New Holder init(
{New Dagger init})})})}}
% 2.100
{Browse 100#{New Shallot init(
{New Radish init(
{New Holder init(
{New Gold init})})})}}
% 2.101
{Browse 101#{New Shallot init(
{New Radish init(
{New Holder init(
{New Integer init(52)})})})}}
% 2.102
{Browse 102#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Dagger init})})})} whatHolder($)}}
% 2.103
{Browse 103#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Gold init})})})} whatHolder($)}}
% 2.104
{Browse 104#{{New Shallot init(
{New Radish init(
{New Holder init(
{New Integer init(52)})})})} whatHolder($)}}
% 2.108
{Browse 108#{{New Holder init({New Integer init(52)})} whatHolder($)}}
% 2.109
{Browse 109#{{New Holder init({New Sword init})} whatHolder($)}}
% 2.110
{Browse 110#{{New Holder init(b)} whatHolder($)}}
% 2.112
{Browse 112#{{New Radish init(
{New Shallot init(
{New Shrimp init(
{New Holder init(
{New Integer init(52)})})})})} whatHolder($)}}
% 2.113
{Browse 113#{{New Shallot init(
{New Shrimp init(
{New Holder init(
{New Integer init(52)})})})} whatHolder($)}}
% 2.114
{Browse 114#{{New Shrimp init(
{New Holder init(
{New Integer init(52)})})} whatHolder($)}}
% 2.115
{Browse 115#{{New Radish init(
{New Shallot init(
{New Shrimp init(
{New Holder init(
{New Integer init(52)})})})})} whatHolder($)}}
{Browse 115#{{New Shallot init(
{New Shrimp init(
{New Holder init(
{New Integer init(52)})})})} whatHolder($)}}
{Browse 115#{{New Shrimp init(
{New Holder init(
{New Integer init(52)})})} whatHolder($)}}
{Browse 115#{{New Holder init(
{New Integer init(52)})} whatHolder($)}}
% 2.120
class Pepper from KebabD
feat Kebab
meth init(K) self.Kebab = K end
meth isVeggie(?$) {self.Kebab isVeggie($)} end
meth whatHolder(?$) {self.Kebab whatHolder($)} end
end
class Zucchini from KebabD
feat Kebab
meth init(K) self.Kebab = K end
meth isVeggie(?$) {self.Kebab isVeggie($)} end
meth whatHolder(?$) {self.Kebab whatHolder($)} end
end
% 2.123
{Browse 123#{{New ManhattanPt init(3 4)} closerTo0({New ManhattanPt init(1 5)} $)}}
% 2.124
{Browse 124#{{New CartesianPt init(3 4)} closerTo0({New CartesianPt init(12 5)} $)}}
% 2.125
class CartesianPt_1 from PointD
feat X Y
meth init(Xi Yi)
self.X = Xi
self.Y = Yi
end
meth distanceTo0(?$)
{FloatToInt {Sqrt {IntToFloat self.X*self.X + self.Y*self.Y}}}
end
meth closerTo0(P ?$)
{self distanceTo0($)} =< {P distanceTo0($)}
end
end
class ManhattanPt_1 from PointD
feat X Y
meth init(Xi Yi)
self.X = Xi
self.Y = Yi
end
meth distanceTo0(?$)
self.X + self.Y
end
meth closerTo0(P ?$)
{self distanceTo0($)} =< {P distanceTo0($)}
end
end
% 2.126
{Browse 126#{{New ManhattanPt init(3 4)} closerTo0({New ManhattanPt init(1 5)} $)}}
% 2.127
{Browse 127#{{New ManhattanPt init(1 5)} closerTo0({New ManhattanPt init(3 4)} $)}}
% 2.128
{Browse 128#{{New CartesianPt init(12 5)} closerTo0({New CartesianPt init(3 4)} $)}}
% 2.129
{Browse 129#{{New CartesianPt init(3 4)} closerTo0({New ManhattanPt init(1 5)} $)}}
|