Перфо - Списки

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Перфо. Списки (из файла примера)

В этом примере использованы следующие команды для работы со списком:

(Список Элемент1 .. ЭлементН) - создание списка
(Длина Список) - количество элементов списка (работает так же для строк и коллекций)
(ПЭЛ Список Индекс) - получить значение элемента (работает так же для строк, массивов и индексируемых коллекций). Если не указан Индекс то получает первый элемент списка.
(УЭЛ Список Значение Индекс) - установить значение элемента (работает так же для массивов и индексируемых коллекций)
(ОЭЛ Список) - возвращает список остальных элементов кроме первого (работает так же с массивами и индексируемыми коллекциями)
(Лев Список КоличествоЭлементов) - отрезать от списка слева указанное количество элементов 
(Прав Список КоличествоЭлементов) - отрезать от списка справа указанное количество элементов 
(Сред Список НомерНачальногоЭлемента КоличествоЭлементов) - отрезать (вырезать) от списка указанное количество элементов начиная с указанного номера.

Простой список

(Перем спис1 (Список 1 2 3 4 5))
(Вывод спис1 пс)

Список с вычисляемыми элементами

(Перем спис2 (Список (+ 1 2) (- 3 4 5)))
(Вывод спис2 пс)

Проверка типа переменной

проверим, что это список (тип переменной)

(Вывод "Список? " (Список? спис1) пс)

Длина списка

(Вывод "длина списка: " (Длина спис1) пс)

выводим 1-й элемент списка (т.к. не указан Индекс)

(Вывод "первый элемент: " (ПЭЛ спис1) пс)
(Вывод "первый элемент: " (Получить спис1) пс)

выводим остальные элементы списка (это будет новый список без первого элемента)

(Вывод "остальные элементы: " (ОЭЛ спис1) пс)

(Вывод "остальные элементы Кроме Первого: " (КромеПервого спис1) пс)

в языке Перфо со списками могут работать функции Лев, Прав и Сред, так же как они работают со строками

эти функции возвращают новый список, даже если в нем один элемент, или даже пустой список, если нечего возвращать

отрежем 2 элемента слева

(Вывод "Лев 2: " (Лев спис1 2) пс)
(Вывод "Лев 2: " (Слева спис1 2) пс)

отрежем слева ноль элементов

(Вывод "Лев 0: " (Лев спис1 0) пс)
(Вывод "Лев 0: " (Слева спис1 0) пс)

отрежем слева больше, чем есть в списке

(Вывод "Лев 20: " (Лев спис1 20) пс)
(Вывод "Лев 20: " (Слева спис1 20) пс)

отрежем 2 элемента справа

(Вывод "Прав 2: " (Прав спис1 2) пс)

отрежем справа ноль элементов

(Вывод "Прав 0: " (Прав спис1 0) пс)

отрежем справа больше, чем есть в списке

(Вывод "Прав 20: " (Прав спис1 20) пс)

В языке Перфо функция ПЭЛ может работать не только со списками но и со строками, массивами, а так же с коллекциями имеющими свойство Item.

Причем, третьим операндом может быть указан индекс получаемого элемента, который по умолчанию равен нулю...

проверим работу со списками

(Вывод "Второй элмент списка (Список 1 2 3): " (ПЭЛ (Список 1 2 3) 1) пс)

проверим работу со строками

(Вывод "Третий символ из строки АБВГД: " (ПЭЛ "АБВГД" 2) пс)

проверим работу с массивами

(Перем мас (Массив 5 Строка))
(мас.Установить "Строка с индексом 2." 2)
(Вывод "Значение элемента массива с индексом 2: " (ПЭЛ мас 2) пс)

проверим работу с коллекциями

(Перем кол (Новый Массив))
(кол.Добавить "А")
(кол.Добавить "Б")
(кол.Добавить "В")
(Вывод "Второй элемент коллекции: " (ПЭЛ кол 1) пс)

функция УЭЛ может установить значение элемента в списке, в массиве или в индексируемой коллекции

проверим работу со списками

(Перем спис4 (Список 1 2 3))
(УЭЛ спис4 100) 
(УЭЛ спис4 200 1)
(УЭЛ спис4 300 2)
(Вывод "Спис4: " спис4 пс)

проверим работу с массивами

(УЭЛ мас "100")
(УЭЛ мас "300" 2)
(Вывод "мас: " (мас.Представление) пс)

проверим работу с коллекциями

(УЭЛ кол "100")
(УЭЛ кол "200" 1)
(Вывод "Первый элемент коллекции: " (ПЭЛ кол) пс)
(Вывод "Второй элемент коллекции: " (ПЭЛ кол 1) пс)

Перфо. Примеры