Динамические структуры данных. Алексеев А.Ю - 27 стр.

UptoLike

{2} function Head ( x : H_list ): H_list;
begin
if Null( x ) then
begin WriteLn; WriteLn( ' ! Head( Nil ) ' ); Halt ;
end
else
if Atom( x ) then
begin WriteLn; WriteLn( ' ! Head( Atom ) ' ); Halt;
end
else Head := x ^ . Hd;
end { Head };
{3} function Tail ( x : H_list ): H_list;
begin
if Null( x ) then
begin WriteLn; WriteLn( ' ! Tail( Nil ) ' ); Halt;
end
else
if Atom( x ) then
begin WriteLn; WriteLn( ' ! Tail( Atom ) ' ); Halt;
end
else Tail := x ^ . Tl;
end { Tail };
{4} function Cons ( x, y : H_list ): H_list;
var p : H_list;
begin
if Atom( y ) then
begin WriteLn; WriteLn( ' ! Cons( x, Atom ) ' ); Halt; end
else
if MaxAvail >= SizeOf( S_expr ) then
begin New( p );
p ^ . Tag:= Pair; p ^ . Hd := x; p ^ . Tl := y;
Cons := p;
end
else
begin WriteLn; WriteLn( ' ! Исчерпана память ' ); Halt;
end;
end { Cons };
{5} function Atom ( x : H_list ): Boolean;
begin
if Null ( x ) then Atom := false
else Atom := ( x ^.Tag = Atomic );
end { Atom };
27
{2} function Head ( x : H_list ): H_list;
   begin
      if Null( x ) then
            begin WriteLn; WriteLn( ' ! Head( Nil ) ' ); Halt ;
            end
   else
      if Atom( x ) then
            begin WriteLn; WriteLn( ' ! Head( Atom ) ' ); Halt;
            end
      else Head := x ^ . Hd;
      end { Head };
{3} function Tail ( x : H_list ): H_list;
   begin
      if Null( x ) then
            begin WriteLn; WriteLn( ' ! Tail( Nil ) ' ); Halt;
            end
   else
      if Atom( x ) then
            begin WriteLn; WriteLn( ' ! Tail( Atom ) ' ); Halt;
            end
      else Tail := x ^ . Tl;
   end { Tail };
{4} function Cons ( x, y : H_list ): H_list;
   var p : H_list;
   begin
      if Atom( y ) then
   begin WriteLn; WriteLn( ' ! Cons( x, Atom ) ' ); Halt; end
   else
      if MaxAvail >= SizeOf( S_expr ) then
            begin New( p );
              p ^ . Tag:= Pair; p ^ . Hd := x; p ^ . Tl := y;
              Cons := p;
            end
   else
      begin WriteLn; WriteLn( ' ! Исчерпана память ' ); Halt;
      end;
   end { Cons };

{5} function Atom ( x : H_list ): Boolean;
   begin
      if Null ( x ) then Atom := false
      else Atom := ( x ^.Tag = Atomic );
        end { Atom };

                                          27