Thursday, February 5, 2009

Ch6, Ex12

declare
fun {NewExtensibleArray L H Init}
A={NewCell {NewArray L H Init}}#Init
proc {CheckOverOrUnderflow I}
Arr=@(A.1)
Low={Array.low Arr}
High={Array.high Arr}
in
if I>High then
High2=Low+{Max I 2*(High-Low)}
Arr2={NewArray Low High2 A.2}
in
for K in Low..High do Arr2.K:=Arr.K end
(A.1):=Arr2
elseif I<Low then
Low2 = Low - {Max (High-Low) (Low-I)}
Arr2={NewArray Low2 High A.2}
in
for K in Low..High do Arr2.K:=Arr.K end
(A.1):=Arr2
end
end
proc {Put I X}
{CheckOverOrUnderflow I}
@(A.1).I:=X
end
fun {Get I}
{CheckOverOrUnderflow I}
@(A.1).I
end
in extArray(get:Get put:Put)
end

No comments:

Post a Comment