Составители:
Рубрика:
< L_list( El ) > ::= < Null_list > | < Non_null_list( El ) >
< Null_lis t> ::= Nil
< Non_null_list( El ) > ::= < Pair( El ) >
< Pair( El ) > ::= ( < Head_l( El ) > . < Tail_l( El ) > )
< Head_l( El ) > ::= < El >
< Tail_l( El ) > ::= < L_list( El ) >
Здесь L_list( El ) – линейный список из элементов типа El, Null_list – пус-
той список, Non_null_list( El ) – непустой линейный список, Head_l( El ) – "го-
лова" списка, Tail_l( El ) – "хвост" списка, Pair( El ) – упорядоченная пара "го-
лова"–"хвост", т.е. элемент соответствующего декартова произведения. Тер-
минальным символом Nil обозначен пустой список, а терминальные символы
( . ) использованы для обозначения элемента декартова произведения. Выбор
других терминальных символов в определении линейного списка породил бы
другое сходное представление списка, сохранив при этом существенные ха-
рактеристики его структуры.
Скобочное представление списка из элементов a, b, c, d типа El согласно
приведенному определению есть конструкция вида ( a . ( b . ( c . ( d . Nil ) ) ) )
или в сокращенной записи ( a b c d ). Пустой список представляется символом
Nil или парой скобок ( ), а список из одного элемента ( d . Nil ) в сокращенной
записи имеет вид ( d ). Переход к сокращенной записи производится с помо-
щью отбрасывания конструкции «. Nil» и удаления необходимое число раз
пары скобок вместе с предшествующей открывающей скобке точкой. Пробе-
лы в сокращенной записи используются для обеспечения однозначности про-
чтения конструкции, количество их выбирается произвольно. Если вместо
пробелов в качестве разделителя использовать, например запятую, то сокра-
щенная скобочная запись списка из элементов a, b, c, d будет иметь вид
( a , b , c , d ).
Зададим не зависящую от формы представления списка функциональную
спецификацию линейного списка, определив c помощью системы правил (ак-
сиом) А1-А5, справедливых для всех x типа El, всех y типа L_list( El ), всех z
типа Non_null_list( El ), четыре базовые функции: предикат (индикатор) Null
(список пуст), селекторы Head ("голова" списка) и Tail ("хвост" списка), кон-
структор Cons :
0) Nil : → Null_list;
1) Null : L_list( El ) → Boolean;
2) Head : Non_null_list( El ) → El;
3) Tail : Non_null_list( El ) → L_list( El );
4) Cons : El ⊗ L_list( El ) → Non_null_list( El );
A1) Null( Nil ) = true;
A2) Null( Cons( x , y ) ) = false;
A3) Head( Cons( x , y ) ) = x;
A4) Tail( Cons( x , y ) ) = y;
A5) Cons( Head( z ) , Tail( z ) ) = z.
19
< L_list( El ) > ::= < Null_list > | < Non_null_list( El ) >
< Null_lis t> ::= Nil
< Non_null_list( El ) > ::= < Pair( El ) >
< Pair( El ) > ::= ( < Head_l( El ) > . < Tail_l( El ) > )
< Head_l( El ) > ::= < El >
< Tail_l( El ) > ::= < L_list( El ) >
Здесь L_list( El ) – линейный список из элементов типа El, Null_list – пус-
той список, Non_null_list( El ) – непустой линейный список, Head_l( El ) – "го-
лова" списка, Tail_l( El ) – "хвост" списка, Pair( El ) – упорядоченная пара "го-
лова"–"хвост", т.е. элемент соответствующего декартова произведения. Тер-
минальным символом Nil обозначен пустой список, а терминальные символы
( . ) использованы для обозначения элемента декартова произведения. Выбор
других терминальных символов в определении линейного списка породил бы
другое сходное представление списка, сохранив при этом существенные ха-
рактеристики его структуры.
Скобочное представление списка из элементов a, b, c, d типа El согласно
приведенному определению есть конструкция вида ( a . ( b . ( c . ( d . Nil ) ) ) )
или в сокращенной записи ( a b c d ). Пустой список представляется символом
Nil или парой скобок ( ), а список из одного элемента ( d . Nil ) в сокращенной
записи имеет вид ( d ). Переход к сокращенной записи производится с помо-
щью отбрасывания конструкции «. Nil» и удаления необходимое число раз
пары скобок вместе с предшествующей открывающей скобке точкой. Пробе-
лы в сокращенной записи используются для обеспечения однозначности про-
чтения конструкции, количество их выбирается произвольно. Если вместо
пробелов в качестве разделителя использовать, например запятую, то сокра-
щенная скобочная запись списка из элементов a, b, c, d будет иметь вид
( a , b , c , d ).
Зададим не зависящую от формы представления списка функциональную
спецификацию линейного списка, определив c помощью системы правил (ак-
сиом) А1-А5, справедливых для всех x типа El, всех y типа L_list( El ), всех z
типа Non_null_list( El ), четыре базовые функции: предикат (индикатор) Null
(список пуст), селекторы Head ("голова" списка) и Tail ("хвост" списка), кон-
структор Cons :
0) Nil : → Null_list;
1) Null : L_list( El ) → Boolean;
2) Head : Non_null_list( El ) → El;
3) Tail : Non_null_list( El ) → L_list( El );
4) Cons : El ⊗ L_list( El ) → Non_null_list( El );
A1) Null( Nil ) = true;
A2) Null( Cons( x , y ) ) = false;
A3) Head( Cons( x , y ) ) = x;
A4) Tail( Cons( x , y ) ) = y;
A5) Cons( Head( z ) , Tail( z ) ) = z.
19
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »
