Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ДРУГИЕ ФУНКЦИИ РАБОТЫ СО СПИСКАМИ



Иногда требуется несколько списков " слить" в один. Эту опе-
рацию для двух списков выполняет слово *СОЕД. Большее число
списков можно объединить с помощью функции СОЕД. Предполо-
жим, существуют два списка СП 1 и СП2, такие что СП1 = (А В),
СП2 = (С D). Выполнив операцию

СП1 СП2 *СОЕД

получим:

' (А В CD)

При объединении нескольких списков *СОЕД доставляет ука-
затель на результирующий список. Если преобразования списков
осуществляются на месте, то результат в стек помещать не нужно.
Такое преобразование выполняет функция 2СОЕД. Ее описание
приведено на экране 42. Для того чтобы присоединить список СШ
к списку СП2 (причем СШ должен предварять СП2), нужно вве-
сти:

СП1 СП2 2СОЕД

Стековая нотация для 2СОЕД выглядит следующим образом:
( © С ПИСОК I -> )


 


172


173


О

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15

О
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Вы уже видели, что при работе со списками часто использу-
ются слова ХВОСТ и ПЕРВЫЙ. При работе с длинными списками
выписывание громоздких цепочек ХВОСТОВ для того, чтобы доб-
раться к конкретному элементу списка, - занятие утомительное. В
таких ситуациях получить, скажем, N-й элемент списка СП, мож-
но с помощью слова ЫНЫЙ (NTH):
































































СП N ЫНЫЙ

При этом в вершину стека помещается указатель на оставшу-
юся часть списка с N-м элементов во главе. Выражение


СП ПОСЛЕДНИЙ

помещает на стек последний элемент, но в случае атома возвраща-
ет атом.

Слово ОБРАТНЫЙ (его неразрушительный вариант) пере-
страивает список, находящийся в стеке, в обратном порядке, а
слово УДАЛИТЬ (REMOVE) в приведенном ниже выражении уда-
ляет из СП все вхождения С-выражения С, используя для сравне-
ния операцию РАВНО:






С СП УДАЛИТЬ

С может быть либо списком внутри СП (так называемым
подсписком), либо атомом. Приведенное ниже выражение по-
мещает на стек число элементов в списке:



СП ДЛИНА

Подсчитываются элементы только верхнего уровня списка. Ес-
ли некоторые элементы внутри данного списка составляют подспи-
сок, то они учитываются как один элемент.

Как было показано выше, слово СПИСОК соединяет С-выра-
жения в список. Список аргументов может быть произвольным, но
должен начинаться с НУЛЯ.





НУЛЬ А В С D И СПИСОК

Приведенный выше фрагмент аналогичен следующему:
D И С ВЯЗЬ С И С ВЯЗЬ В 1 1 С ВЯЗЬ А 1 1 С ВЯЗЬ

Слово 2СОЕД отличается от слова СПИСОК тем, что сводит все
существующие списки в один, а СПИСОК создает список из
выражений.

Для того чтобы определить, является ли список СП1 элемен-
том списка СП2, нужно ввести:


47

\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
UNNEST

( @СПИСОК -> ©ПОСЛЕДНИЙ) \ ВОЗВРАЩАЕТ УКАЗАТЕЛЬ

\ НА ПОСЛЕДНИЙ ЭЛЕМЕНТ СПИСКА С УКАЗАТЕЛЕМ ©СПИСОК

: ПОСЛЕДНИЙ DUP ХВОСТ НОЛЬ NOT

IF ХВОСТ РЕКУРСИЯ

THEN

\ ИТЕРАТИВНЫЙ ВАРИАНТ СЛОВА ПОСЛЕДНИЙ
: ПОСЛЕДНИЙ

BEGIN DUP ХВОСТ НОЛЬ NOT

WHILE ХВОСТ

REPEAT

48

\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83

( ©СПИСОК -> N) \ ВОЗВРАЩАЕТ ЧИСЛО ЭЛЕМЕНТОВ В СПИСКЕ
: ДЛИНА DUP НОЛЬ

IF DROP О

ELSE ХВОСТ РЕКУРСИЯ 1+

THEN

UNNEST

\ ДЛИНА. ИТЕРАТИВНЫЙ ВАРИАНТ

: ДЛИНА О

BEGIN OVER НОЛЬ NOT
WHILE 1+ SWAP ХВОСТ SWAP
REPEAT NIP

52

\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
( СП1 N -> СП2)
: NHb^ DUP1<
IF2DR0P НУЛЬ
ELSE

BEGIN 1- DUP
WHILE SWAP ХВОСТ SWAP
REPEAT DROP
THEN

Экраны 47, 48, 52. Слова построения списков: ПОСЛЕДНИЙ, ДЛИНА

и ЫНЫЙ


 


174


175


Вы уже видели, что при работе со списками часто использу-
ются слова ХВОСТ и ПЕРВЫЙ. При работе с длинными списками
выписывание громоздких цепочек ХВОСТОВ для того, чтобы доб-
раться к конкретному элементу списка, - занятие утомительное. В
таких ситуациях получить, скажем, N-й элемент списка СП, мож-
но с помощью слова NHblH (NTH):






























СП N М НЫЙ

При этом в вершину стека помещается указатель на оставшу-
юся часть списка с N-м элементов во главе. Выражение


СП ПОСЛЕДНИЙ

помещает на стек последний элемент, но в случае атома возвраща-
ет атом.

Слово ОБРАТНЫЙ (его неразрушительный вариант) пере-
страивает список, находящийся в стеке, в обратном порядке, а
слово УДАЛИТЬ (REMOVE) в приведенном ниже выражении уда-
ляет из СП все вхождения С-выражения С, используя для сравне-
ния операцию РАВНО:






С СП УДАЛИТЬ

С может быть либо списком внутри СП (так называемым
подсписком), либо атомом. Приведенное ниже выражение по-
мещает на стек число элементов в списке:



СП ДЛ ИН А

Подсчитываются элементы только верхнего уровня списка. Ес-
ли некоторые элементы внутри данного списка составляют подспи-
сок, то они учитываются как один элемент.

Как было показано выше, слово СПИСОК соединяет С-выра-
жения в список. Список аргументов может быть произвольным, но
должен начинаться с НУЛЯ.





НУЛЬ А В С D 1 1 СПИСОК

Приведенный выше фрагмент аналогичен следующему:
D 1 1 С ВЯЗЬ С 1 1 С ВЯЗЬ В 1 1 С ВЯЗЬ А И С ВЯЗЬ

Слово 2СОЕД отличается от слова СПИСОК тем, что сводит все
существующие списки в один, а СПИСОК создает список из
выражений.

Для того чтобы определить, является ли список СП1 элемен-
том списка СП2, нужно ввести:


47

0 \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

1 \ НА ФОРТЕ-83

2 UNNEST
3

 

4 ( ©СПИСОК -> ©ПОСЛЕДНИ Й ) \ ВОЗВРАЩАЕТ УКАЗАТЕЛЬ

5 \ НА ПОСЛЕДНИЙ ЭЛЕМЕНТ СПИСКА С УКАЗАТЕЛЕМ ©СПИСОК


Поделиться:



Последнее изменение этой страницы: 2019-03-29; Просмотров: 218; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь