Составители:
Рубрика:
Unit HList;
{Реализация иерархического списка на Турбо-Паскале}
Interface
Uses Global; { модуль, в котором описан тип элементов списка El }
{============================================================== }
{Ссылочное представление в динамической памяти }
type
{ El – базовый тип для элементов списка (описан в Global ) }
Ref_S_expr = ^ S_expr; { ссылка на S – выражение }
record { S – выражение: }
case Tag : ( Atomic, Pair ) of
Atomic : ( Atm: El ); { атомарное }
Pair : ( Hd, T l: Ref_S_expr ) { или пара }
end { S_expr }; {"голова"–"хвост"}
H_list = Ref_S_expr; {иерархический список }
{============================================================== }
{1} function Null ( x : H_list ) : Boolean;
{ список пуст }
{2}function Head ( x : H_list ) : H_List;
{селектор "голова" иерархического списка; отказ, если x – атом или пустой список }
{3} function Tail ( x : H_list ) : H_list;
{ селектор "хвост" иерархического списка; отказ, если x – атом или пустой список }
{4} function Cons ( x, y : H_list ) : H_list;
{ конструктор; отказ, если y – атом }
{5} function Atom ( x : H_list ) : Boolean;
{ список атомарен }
{6} function Make_Atom ( x : El ) : H_list;
{ создать атомарное S – выражение }
{7} function Get_El ( x : H_list ) : El;
{ получить содержимое атомарного S – выражения; отказ, если x - не атом }
{ } function Copy ( x : H_list ): H_list;
{ копировать список }
{ } procedure Destroy ( x : H_list );
{освободить память, занятую под список }
{==============================================================}
Implementation
... {Здесь на месте ... размещаются блоки процедур функций }
end { HList }.
Рис. 1.22. Макет модуля Hlist
Далее приведен один из возможных вариантов реализации описанных
функций в секции Implementation модуля HList.
{1} function Null ( x : H_list ): Boolean;
begin
Null:= ( x = nil );
end { Null };
26
Unit HList; {Реализация иерархического списка на Турбо-Паскале} Interface Uses Global; { модуль, в котором описан тип элементов списка El } {============================================================== } {Ссылочное представление в динамической памяти } type { El – базовый тип для элементов списка (описан в Global ) } Ref_S_expr = ^ S_expr; { ссылка на S – выражение } record { S – выражение: } case Tag : ( Atomic, Pair ) of Atomic : ( Atm: El ); { атомарное } Pair : ( Hd, T l: Ref_S_expr ) { или пара } end { S_expr }; {"голова"–"хвост"} H_list = Ref_S_expr; {иерархический список } {============================================================== } {1} function Null ( x : H_list ) : Boolean; { список пуст } {2}function Head ( x : H_list ) : H_List; {селектор "голова" иерархического списка; отказ, если x – атом или пустой список } {3} function Tail ( x : H_list ) : H_list; { селектор "хвост" иерархического списка; отказ, если x – атом или пустой список } {4} function Cons ( x, y : H_list ) : H_list; { конструктор; отказ, если y – атом } {5} function Atom ( x : H_list ) : Boolean; { список атомарен } {6} function Make_Atom ( x : El ) : H_list; { создать атомарное S – выражение } {7} function Get_El ( x : H_list ) : El; { получить содержимое атомарного S – выражения; отказ, если x - не атом } { } function Copy ( x : H_list ): H_list; { копировать список } { } procedure Destroy ( x : H_list ); {освободить память, занятую под список } {==============================================================} Implementation ... {Здесь на месте ... размещаются блоки процедур функций } end { HList }. Рис. 1.22. Макет модуля Hlist Далее приведен один из возможных вариантов реализации описанных функций в секции Implementation модуля HList. {1} function Null ( x : H_list ): Boolean; begin Null:= ( x = nil ); end { Null }; 26
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »