Составители:
Рубрика:
Полная запись Сокращенная запись
a
Nil
( a . ( b . ( c . Nil ) ) )
( a . ( ( b . ( c . Nil ) ) . ( d . ( e . Nil ) ) ) )
a
( )
( a b c )
( a ( b c ) d e )
Рис. 1.20. Примеры иерархических списков
Зададим аналогично тому, как это было сделано в 1.6 для линейного спи-
ска, функциональную спецификацию иерархического списка, определив c по-
мощью системы правил (аксиом) А1–А7, справедливых для всех t типа El, всех
u типа L_lis t( S_expr ( El ) ), всех v типа Non_null_list ( S_expr ( El ) ), всех w
типа S_expr ( El ), константу Nil, обозначающую пустой список, четыре ранее
уже встречавшиеся базовые функции Null, Head, Tail, Cons, а также предикат
Atom, проверяющий S–выражение на атомарность:
0) Nil : → Null_list;
1) Null : L_list ( S_expr ( El ) ) → Boolean;
2) Head : Non_null_list ( S_expr ( El ) ) → S_expr ( El );
3) Tail : Non_null_list ( S_expr ( El ) ) → L_list ( S_expr ( El ) );
4) Cons : S_expr( El ) ⊗ L_list( S_expr( El ) ) → Non_null_list( S_expr( El ) );
5) Atom : S_expr( El ) → Boolean;
A1) Null ( Nil ) = true;
A2) Null ( Cons ( w, u ) ) = false;
A3) Head ( Cons ( w, u ) ) = w;
A4) Tail ( Cons ( w, u ) ) = u;
A5) Cons ( Head( v ), Tail( v ) ) = v.
A6) Atom ( t ) = true;
A7) Atom ( u ) = false;
Согласно правилу A7 Atom ( Nil ) = false, что отличается от распространен-
ного представления пустого списка как атома специального вида, но соответ-
ствует приведенному ранее определению иерархического списка. Доступ к
компонентам S–выражения, которыми могут быть как атомы, так и списки,
осуществляется с помощью селекторов Head и Tail. Так, например, если
u = ( a ( b c ) d e ), то
Head ( Tail ( u ) ) = ( b c );
Head ( Tail ( Head ( Tail ( u ) ) ) ) = c.
Рассмотрим теперь примеры использования функции Cons для конструи-
рования списков:
( a (b c) d e ) = ( a . ( ( b . ( c . Nil ) ) . ( d . ( e .Nil ) ) ) )=
Cons ( a, Cons ( Cons ( b, Cons ( c, Nil ) ) , Cons ( d, Cons ( e, Nil ) ) ) );
(a (( ) (b c) d) e) = (a.( (Nil . ( ( b . (c . Nil) ) . (d . Nil) ) ) . (e . Nil) ) ) =
Cons(a, Cons(Cons(Nil,Cons(Cons(b,Cons(c,Nil)),Cons(d,Nil))),Cons(e,Nil))).
23
Полная запись Сокращенная запись a a Nil ( ) ( a . ( b . ( c . Nil ) ) ) (abc) ( a . ( ( b . ( c . Nil ) ) . ( d . ( e . Nil ) ) ) ) (a(bc)de) Рис. 1.20. Примеры иерархических списков Зададим аналогично тому, как это было сделано в 1.6 для линейного спи- ска, функциональную спецификацию иерархического списка, определив c по- мощью системы правил (аксиом) А1–А7, справедливых для всех t типа El, всех u типа L_lis t( S_expr ( El ) ), всех v типа Non_null_list ( S_expr ( El ) ), всех w типа S_expr ( El ), константу Nil, обозначающую пустой список, четыре ранее уже встречавшиеся базовые функции Null, Head, Tail, Cons, а также предикат Atom, проверяющий S–выражение на атомарность: 0) Nil : → Null_list; 1) Null : L_list ( S_expr ( El ) ) → Boolean; 2) Head : Non_null_list ( S_expr ( El ) ) → S_expr ( El ); 3) Tail : Non_null_list ( S_expr ( El ) ) → L_list ( S_expr ( El ) ); 4) Cons : S_expr( El ) ⊗ L_list( S_expr( El ) ) → Non_null_list( S_expr( El ) ); 5) Atom : S_expr( El ) → Boolean; A1) Null ( Nil ) = true; A2) Null ( Cons ( w, u ) ) = false; A3) Head ( Cons ( w, u ) ) = w; A4) Tail ( Cons ( w, u ) ) = u; A5) Cons ( Head( v ), Tail( v ) ) = v. A6) Atom ( t ) = true; A7) Atom ( u ) = false; Согласно правилу A7 Atom ( Nil ) = false, что отличается от распространен- ного представления пустого списка как атома специального вида, но соответ- ствует приведенному ранее определению иерархического списка. Доступ к компонентам S–выражения, которыми могут быть как атомы, так и списки, осуществляется с помощью селекторов Head и Tail. Так, например, если u = ( a ( b c ) d e ), то Head ( Tail ( u ) ) = ( b c ); Head ( Tail ( Head ( Tail ( u ) ) ) ) = c. Рассмотрим теперь примеры использования функции Cons для конструи- рования списков: ( a (b c) d e ) = ( a . ( ( b . ( c . Nil ) ) . ( d . ( e .Nil ) ) ) )= Cons ( a, Cons ( Cons ( b, Cons ( c, Nil ) ) , Cons ( d, Cons ( e, Nil ) ) ) ); (a (( ) (b c) d) e) = (a.( (Nil . ( ( b . (c . Nil) ) . (d . Nil) ) ) . (e . Nil) ) ) = Cons(a, Cons(Cons(Nil,Cons(Cons(b,Cons(c,Nil)),Cons(d,Nil))),Cons(e,Nil))). 23
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »