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

UptoLike

мых с типом Char, то процедура Read_H_list ввода иерархического списка и
используемые ею вспомогательные процедуры Read_S_expr и Read_seq могут
быть записаны в виде
{1} procedure Read_H_list ( var f: Text; var y: H_list );
var x : El;
begin
repeat Read( f, x ); until x <> ' ';
Read_S_expr( f, x, y );
end { Read_H_list };
{2} procedure Read_S_expr ( var f: Text; prev: El; var y: H_list );
{ prev ранее прочитанный символ }
var x : El;
begin
if prev = ' ) ' then begin Writeln( ' ! Ошибка 1 ' ); Halt; end
else
if prev <> ' ( ' then y := Make_Atom( prev )
else Read_seq ( f, y );
end { Read_S_expr };
{3} procedure Read_seq ( var f : Text; var y: H_list);
var x : El; p1, p2 : H_list;
begin
if Eof( f ) then begin WriteLn(' ! Ошибка 2 ' ); Halt; end
else
begin repeat Read( f , x ) until x <>' ';
if x = ' ) ' then y := Nil
else begin Read_S_expr( f , x , p1 );
Read_Seq( f , p2 ); y := Cons( p1 , p2 );
end;
end;
end {Read_Seq};
Процедура вывода списка с обрамляющими его скобками Write_H_list, а без
обрамляющих скобок Write_List.
{4} procedure Write_H_list ( S : H_list );
begin {пустой список выводится как () }
if Null( x ) then Write( ' ( ) ' )
else
if Atom( x ) then Write( ' ', x ^ . Atm )
else {непустой список}
begin Write( ' ( ' ); Write_List( x ); Write( ' ) ' ) end;
end {Write_H_list};
31
мых с типом Char, то процедура Read_H_list ввода иерархического списка и
используемые ею вспомогательные процедуры Read_S_expr и Read_seq могут
быть записаны в виде
{1} procedure Read_H_list ( var f: Text; var y: H_list );
    var x : El;
    begin
      repeat Read( f, x ); until x <> ' ';
             Read_S_expr( f, x, y );
       end { Read_H_list };
{2} procedure Read_S_expr ( var f: Text; prev: El; var y: H_list );
            { prev – ранее прочитанный символ }
    var x : El;
    begin
      if prev = ' ) ' then begin Writeln( ' ! Ошибка 1 ' ); Halt; end
      else
       if prev <> ' ( ' then y := Make_Atom( prev )
       else Read_seq ( f, y );
    end { Read_S_expr };
{3} procedure Read_seq ( var f : Text; var y: H_list);
    var x : El; p1, p2 : H_list;
    begin
     if Eof( f ) then begin WriteLn(' ! Ошибка 2 ' ); Halt; end
     else
       begin repeat Read( f , x ) until x <>' ';
          if x = ' ) ' then y := Nil
          else begin Read_S_expr( f , x , p1 );
                        Read_Seq( f , p2 ); y := Cons( p1 , p2 );
                end;
       end;
end {Read_Seq};

Процедура вывода списка с обрамляющими его скобками Write_H_list, а без
обрамляющих скобок Write_List.

{4} procedure Write_H_list ( S : H_list );
   begin                              {пустой список выводится как () }
      if Null( x ) then Write( ' ( ) ' )
      else
           if Atom( x ) then Write( ' ', x ^ . Atm )
           else                                       {непустой список}
                  begin Write( ' ( ' ); Write_List( x ); Write( ' ) ' ) end;
   end {Write_H_list};



                                           31