Пример «Списки»
Файлы:
- Синтаксис языка
- Списки
- Списки.перфо
- Списки
Пример программы на языке программирования Перфо:
//Эта программа написана на языке программирования Перфо
//для демонстрации работы со списками
//В этом примере использованы следующие действия для работы со списком:
// (Список Элемент1 .. ЭлементН) - создание списка
// (Длина Список) - количество элементов списка (работает так же для строк и коллекций)
// (ПЭЛ Список Индекс) - получить значение элемента (работает так же для строк, массивов и индексируемых коллекций)
// (УЭЛ Список Значение Индекс) - установить значение элемента (работает так же для массивов и индексируемых коллекций)
// (ОЭЛ Список) - возвращает список остальных элементов кроме первого.
// (ОЭЛ Список Количество) - возвращает список остальных элементов кроме указанного количества первых.
// ОЭЛ работает так же с массивами и индексируемыми коллекциями.
// Если в списке только один элемент, то ОЭЛ возвращает пустой список.
// Если в списке нет элементов, то ОЭЛ возвращает Неопределено.
// (ДЭЛ Значение) - создаёт новый список, добавляет в него значение, как первый элемент и возвращает созданный список
// (ДЭЛ Список Значение1 ... ЗначениеН) - добавляет все значения в список и возвращает его
// (работает так же с коллекциями имеющими один из методов Добавить, Вставить, Add, Append, Push или Enqueue)
// (СЭЛ СписокИлиЗначение1 ... СписокИлиЗначениеН) - складывает все значения в список и возвращает его.
// Раскрывает все параметры-списки и складывает элементы в один список.
//
// Для некоторых имен действий существуют синонимы:
// ДЭЛ = ДобавитьЭлемент
// ПЭЛ = ПолучитьЭлемент
// УЭЛ = УстановитьЭлемент
// ОЭЛ = ОстальныеЭлементы
// СЭЛ = СложитьЭлементы
//
// Действия для обрезки списка (работают так же для строк):
// (Лев Список КоличествоЭлементов) - отрезать от списка слева указанное количество элементов
// (Прав Список КоличествоЭлементов) - отрезать от списка справа указанное количество элементов
// (Сред Список НомерНачальногоЭлемента КоличествоЭлементов) - отрезать от списка указанное количество элементов
// начиная с указанного номера.
//
//создадим простой список
(Перем спис1 (Список 1 2 3 4 5))
(Вывод спис1 пс)
//создадим список с вычисляемыми элементами
(Перем спис2 (Список (+ 1 2) (- 3 4 5)))
(Вывод спис2 пс)
//создадим список и добавим в него значение 5
(Вывод (ДЭЛ 5) пс)
//добавим в список элементы
(Вывод (ДЭЛ (Список 1 2 3) 4 5 6) пс)
//то же самое с переменной
(Перем спис2 (Список 1 2 3))
(ДЭЛ спис2 4 5 6)
(Вывод спис2 пс)
//проверим действие СЭЛ
(Вывод "СЭЛ " (СЭЛ 5 6 7) пс)
(Вывод "СЭЛ " (СЭЛ 5 (Список 6 7)) пс)
//внимание! СЭЛ складывает списки не рекурсивно!
(Вывод "СЭЛ " (СЭЛ (Список 4 5) (Список 6 7 (Список 8 9))) пс)
//проверим, что это список
(Вывод "Список? " (Список? спис1) пс) //Да
(Вывод "Список? " (Список? 222) пс) //Нет
//длина списка
(Вывод "длина списка: " (Длина спис1) пс)
//выводим первый элемент списка
(Вывод "первый элемент: " (ПЭЛ спис1) пс)
//аналог ПЭЛ
(Вывод "первый элемент: " (ПолучитьЭлемент спис1) пс)
//выводим остальные элементы списка (это будет новый список без первого элемента)
(Вывод "остальные элементы без первого: " (ОЭЛ спис1) пс)
//аналог ОЭЛ
(Вывод "остальные элементы без первого: " (ОстальныеЭлементы спис1) пс)
//выводим остальные элементы списка (это будет новый список без 3-х первых элементов)
(Вывод "остальные элементы без 3-х первых: " (ОЭЛ спис1 3) пс)
//аналог ОЭЛ
(Вывод "кроме первого: " (КромеПервого спис1) пс)
//аналог ОЭЛ
(Вывод "кроме 3-х первых: " (КромеПервых спис1 3) пс)
//в языке Перфо со списками могут работать функции Лев, Прав и Сред, так же как они работают со строками
//эти функции возвращают новый список, даже если в нем один элемент, или даже пустой список, если нечего возвращать
//отрежем 2 элемента слева
(Вывод "Лев 2: " (Лев спис1 2) пс)
//отрежем слева ноль элементов
(Вывод "Лев 0: " (Лев спис1 0) пс)
//отрежем слева больше, чем есть в списке
(Вывод "Лев 20: " (Лев спис1 20) пс)
//не указали количество
(Вывод "Лев : " (Лев спис1) пс)
//отрежем 2 элемента справа
(Вывод "Прав 2: " (Прав спис1 2) пс)
//отрежем справа ноль элементов
(Вывод "Прав 0: " (Прав спис1 0) пс)
//отрежем справа больше, чем есть в списке
(Вывод "Прав 20: " (Прав спис1 20) пс)
//не указали количество
(Вывод "Прав : " (Прав спис1) пс)
//отрежем 2 элемента начиная со 2-го
(Вывод "Сред 2 2: " (Сред спис1 2 2) пс)
//отрежем 0 элементов начиная со 2-го
(Вывод "Сред 2 0: " (Сред спис1 2 0) пс)
//отрежем больше, чем есть в списке начиная со 2-го
(Вывод "Сред 2 20: " (Сред спис1 2 20) пс)
//не указали количество
(Вывод "Сред 2 : " (Сред спис1 2) пс)
//не указали оба параметра
(Вывод "Сред : " (Сред спис1) пс)
//В языке Перфо функция ПЭЛ может работать не только со списками
//но и со строками, массивами, а так же с коллекциями имеющими свойство Item.
//Причем, третим операндом может быть указан индекс получаемого элемента,
//который по умолчанию равен нулю...
//проверим работу со списками
(Вывод "Второй элмент списка (Список 1 2 3): " (ПЭЛ (Список 1 2 3) 1) пс)
//проверим работу со строками
(Вывод "Третий символ из строки АБВГД: " (ПЭЛ "АБВГД" 2) пс)
//проверим работу с массивами
(Перем мас (Массив 5 Строка))
(мас.Установить "Строка с индексом 2." 2)
(Вывод "Значение элемента массива с индексом 2: " (ПЭЛ мас 2) пс)
//проверим работу с коллекциями
(Перем кол (Новый Массив))
(кол.Добавить "А")
(ДЭЛ кол "Б" "В" "Г")
(кол.Добавить "Д")
(Вывод "Коллекция: " кол.Представление пс)
(Вывод "Первый элемент коллекции: " (ПЭЛ кол) пс)
(Вывод "Второй элемент коллекции: " (ПЭЛ кол 1) пс)
//функция УЭЛ может установить значение элемента в списке, в массиве или в индексируемой коллекции
//проверим работу со списками
(Перем спис4 (Список 1 2 3 4))
(УЭЛ спис4 100)
(УЭЛ спис4 200 1)
//аналог УЭЛ
(УстановитьЭлемент спис4 300 2)
(Вывод "Спис4: " спис4 пс)
//проверим работу с массивами
(УЭЛ мас "100")
(УЭЛ мас "300" 2)
(Вывод "мас: " мас.Представление пс)
//проверим работу с коллекциями
(УЭЛ кол "100")
(УЭЛ кол "200" 1)
(Вывод "Первый элемент коллекции: " (ПЭЛ кол) пс)
(Вывод "Второй элемент коллекции: " (ПЭЛ кол 1) пс)
//проверим функцию СрезСтроки
(Вывод "Срезы строки:" пс)
(Вывод (СрезСтроки "Вася+Ася" 5) пс)
(Вывод (СрезСтроки "Вася+Ася" 5 7) пс)
(Вывод (СрезСтроки "Вася+Ася" 5 7 1) пс)
(Вывод (СрезСтроки "Вася+Ася" 0 Неопределено 2) пс)
(Вывод (СрезСтроки "Вася+Ася" Неопределено 0 -1) пс)
//проверим функцию СрезМассива
(Вывод "Срезы массива:" пс)
(Перем масВас (. "Вася+Ася" ВМассивСимволов))
(Вывод (.(СрезМассива масВас 5)Представление) пс)
(Вывод (.(СрезМассива масВас 5 7)Представление) пс)
(Вывод (.(СрезМассива масВас 5 7 1)Представление) пс)
(Вывод (.(СрезМассива масВас 0 Неопределено 2)Представление) пс)
(Вывод (.(СрезМассива масВас Неопределено 0 -1)Представление) пс)
К началу статьи
Вернуться в раздел:
Примеры по языку Перфо
Перейти в раздел:
Примеры