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