Составители:
Рубрика:
Вызовы Возвращаемые значения
Reverse1 ( ( a b ) )
Rev ( ( a b ), Nil )
Rev ( ( b ), Cons( a, Nil ) )
* Cons ( a, Nil )
Rev ( Nil, Cons ( b, ( a ) ) )
* Cons ( b, ( a ) ) )
( b a )
( b a )
( b a )
( a )
( b a )
( b a )
Рис. 1.19. Последовательность вызовов функций, порождаемая вызовом Reverse1
Количество вызовов конструктора Cons в последнем варианте обращения
списка длины n, очевидно, равно n, что по сравнению с первым вариантом да-
ет существенный выигрыш в объеме вычислений.
Вопросы реализации рекурсивной обработки списков на Паскале рассмот-
рены далее в 1.7 сразу для иерархических списков, частным случаем которых
являются списки линейные.
1.7. Иерархические списки
Рассмотренные в предыдущих разделах динамические структуры однотип-
ных данных предназначены только для обработки последовательностей эле-
ментов, тогда как в практических приложениях возникает необходимость ра-
боты с более сложными, нелинейными конструкциями. Рассмотрим одну из
них, называемую иерархическим списком элементов базового типа El или S-
выражением. Определим соответствующий тип данных S_expr ( El ) рекур-
сивно, используя данное в 1.6 определение линейного списка (типа L_list ):
< S_expr ( El ) > ::= < Atomic ( El ) > | < L_list ( S_expr( El ) ) >
< Atomic ( E ) > ::= < El >
Иерархический список согласно определению представляет собой или
элемент базового типа El, называемый в этом случае атомом ( атомарным S–
выражением ), или линейный список из S–выражений. Приведенное опре-
деление задает структуру непустого иерархического списка как элемента раз-
меченного объединения множества атомов и множества пар "голова"–"хвост"
и порождает различные формы представления в зависимости от принятой
формы представления линейного списка. Традиционно иерархические списки
представляют или графически, используя для изображения структуры списка
двухмерный рисунок, или в виде одномерной скобочной записи.
Рассмотрим примеры (рис. 1.20) иерархических списков из элементов базово-
го типа El, представляющие списки в полной и сокращенной скобочной записи.
Переход к сокращенной записи произведен по правилам, изложенным в 1.6.
22
Вызовы Возвращаемые значения Reverse1 ( ( a b ) ) (ba) Rev ( ( a b ), Nil ) (ba) Rev ( ( b ), Cons( a, Nil ) ) (ba) * Cons ( a, Nil ) (a) Rev ( Nil, Cons ( b, ( a ) ) ) (ba) * Cons ( b, ( a ) ) ) (ba) Рис. 1.19. Последовательность вызовов функций, порождаемая вызовом Reverse1 Количество вызовов конструктора Cons в последнем варианте обращения списка длины n, очевидно, равно n, что по сравнению с первым вариантом да- ет существенный выигрыш в объеме вычислений. Вопросы реализации рекурсивной обработки списков на Паскале рассмот- рены далее в 1.7 сразу для иерархических списков, частным случаем которых являются списки линейные. 1.7. Иерархические списки Рассмотренные в предыдущих разделах динамические структуры однотип- ных данных предназначены только для обработки последовательностей эле- ментов, тогда как в практических приложениях возникает необходимость ра- боты с более сложными, нелинейными конструкциями. Рассмотрим одну из них, называемую иерархическим списком элементов базового типа El или S- выражением. Определим соответствующий тип данных S_expr ( El ) рекур- сивно, используя данное в 1.6 определение линейного списка (типа L_list ): < S_expr ( El ) > ::= < Atomic ( El ) > | < L_list ( S_expr( El ) ) > < Atomic ( E ) > ::= < El > Иерархический список согласно определению представляет собой или элемент базового типа El, называемый в этом случае атомом ( атомарным S– выражением ), или линейный список из S–выражений. Приведенное опре- деление задает структуру непустого иерархического списка как элемента раз- меченного объединения множества атомов и множества пар "голова"–"хвост" и порождает различные формы представления в зависимости от принятой формы представления линейного списка. Традиционно иерархические списки представляют или графически, используя для изображения структуры списка двухмерный рисунок, или в виде одномерной скобочной записи. Рассмотрим примеры (рис. 1.20) иерархических списков из элементов базово- го типа El, представляющие списки в полной и сокращенной скобочной записи. Переход к сокращенной записи произведен по правилам, изложенным в 1.6. 22
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »