Составители:
Рубрика:
мых с типом 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
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »