Добро пожаловать в ваш первый проект на Lispex через веб‑трансформер Lena Code! В «Начале работы» вы узнали, как конвертировать Lispex в целевой язык и запускать код его обычными средствами. Сейчас создадим небольшую, но полноценную программу, которая обрабатывает данные и выводит форматированный отчёт.
Цель
Мы напишем программу, которая:
- Определяет список задач, каждая из которых имеет имя и приоритет.
- Фильтрует этот список, чтобы найти только задачи с высоким приоритетом.
- Форматирует задачи с высоким приоритетом в читаемые строки.
- Выводит итоговый отчет в консоль.
Это научит вас, как определять структуры данных, создавать вспомогательные функции и использовать мощные встроенные функции вместе с модулями стандартной библиотеки, такими как io и string.
Шаг 1: Откройте Lena Code (без локального файла)
Откройте https://www.lenacode.com/code/. Новый файл Lispex автоматически называется LENA_001.lspx. Вставьте код ниже в левый редактор (Input).
Шаг 2: Определите данные
Сначала давайте определим наш список задач. Мы будем использовать переменную с именем tasks для хранения списка списков. Каждый внутренний список будет содержать имя задачи (строку) и ее приоритет (число, где чем выше значение, тем важнее задача).
;; LENA_001.lspx (автоимя в Lena Code)
;; Определяем наши исходные данные: список задач.
(define tasks
(list (list "Написать документацию" 2)
(list "Исправить критическую ошибку" 3)
(list "Провести рефакторинг основного движка" 3)
(list "Добавить новую функциональность" 1)
(list "Спланировать маркетинговую кампанию" 2)))Шаг 3: Напишите вспомогательную функцию
Хорошей практикой является разделение логики на небольшие, повторно используемые функции. Давайте создадим функцию, которая проверяет, является ли задача «высокоприоритетной» (мы определим это как приоритет 3 или выше).
;; (Добавьте это в тот же LENA_001.lspx)
;; Вспомогательная функция, которая возвращает `#t`, если приоритет задачи ≥ 3.
;; `(list-first (list-rest task))` -- это распространённая идиома в языках семейства Lisp
;; для получения второго элемента списка.
(define (is-high-priority? task)
(>= (list-first (list-rest task)) 3))Шаг 4: Обработайте данные для отчета
А теперь самое главное! Мы объединим в цепочку встроенные функции, чтобы преобразовать наши исходные данные tasks в итоговый список отформатированных строк отчета.
filterбудет использовать нашу функциюis-high-priority?, чтобы создать новый список, содержащий только задачи с высоким приоритетом.mapвозьмет этот отфильтрованный список и применитlambda-функцию для форматирования каждой задачи в удобную для чтения строку, используяstr-concatдля безопасности.
;; (Добавьте это ниже, всё в 001.lspx)
;; 1. Фильтруем список задач.
(define high-priority-tasks (filter is-high-priority? tasks))
;; 2. Преобразуем отфильтрованный список в новый список отформатированных строк отчета.
(define report-lines
(map (lambda (task)
(string-append "СРОЧНО: " (list-first task)))
high-priority-tasks))Шаг 5: Выведите итоговый отчет
Наша переменная report-lines теперь содержит данные, которые мы хотим отобразить. Чтобы фактически показать их пользователю, нам нужно выполнить «действие ввода-вывода» (I/O). Мы будем использовать функцию println, которую импортировали ранее, применяя ее к каждой строке нашего отчета.
;; (Добавьте это в конце 001.lspx)
;; 3. Выводим каждую строку отчета в консоль.
;; (Добавьте этот код в task_report.lspx)
(println "--- Отчет по задачам с высоким приоритетом ---")
(map println report-lines)
(println "---------------------------------------------")Шаг 6: Конвертируйте и запустите в целевом языке
В Lena Code выберите Output язык и нажмите Convert. Скопируйте результат и запустите его обычными средствами этого языка. Примеры:
- Python: сохраните как
report.py, выполнитеpython report.py - Node.js (TypeScript): сохраните
report.ts, выполнитеtsx report.ts(или транспилируйте в JS иnode report.js)
Ожидаемый результат:
--- Отчет по задачам с высоким приоритетом ---
СРОЧНО: Исправить критическую ошибку
СРОЧНО: Провести рефакторинг основного движка
---------------------------------------------
Заключение
Поздравляем! Вы создали полноценную программу на Lispex. Вы освоили структуру кода, определение данных и функций, а также мощный паттерн filter/map для элегантного преобразования данных в отчёт. С помощью трансформера выбирайте любой необходимый рантайм.
Теперь попробуйте изменить программу:
- Измените пороговое значение приоритета в функции
is-high-priority?. - Измените формат отчета в
lambda-функции, передаваемой вmap. - Добавьте больше задач в исходный список
tasks.