В Лиспексе можно написать правило принятия решения и увидеть, какие входные данные дают конкретный ответ. Пример расчёта доставки показывает, зачем отделять вычисление от приложения, которое применяет результат.
Начните с правила и ответа
Вставьте эту программу в песочницу.
(define (shipping total)
(if (>= total 50) 0 5))
(list (shipping 62) (shipping 30))Результат:
(0 5)При сумме заказа 62 доставка стоит 0, а при сумме 30 стоит 5. Правило получает сумму как аргумент. Вызывающее приложение читает заказ и применяет рассчитанную стоимость.
Укажите ввод и условия выполнения
Когда сумма передаётся в shipping, расчёт можно разобрать по правилу и его входным данным.
Файлами, сетевыми запросами, часами, транзакциями и внешними действиями занимается вызывающее приложение.
Для повторного выполнения сохраняйте тот же исходник, ввод, реализацию среды выполнения и профиль ресурсов. Профиль ресурсов задаёт лимиты, например объём вычислений и памяти. Приложение может установить их до запуска правила. Руководство по ресурсам объясняет, как лимиты влияют на выполнение.
Определите поведение каждой формы языка
Лиспекс следует традиции Scheme.
Для каждой формы языка определены входные данные, правила вычисления и диагностика.
Например, if вычисляет условие, а затем только выбранную ветвь.
В правиле доставки >= включает сам порог, поэтому при сумме 50 доставка стоит 0.
Эти правила задаёт спецификация языка LISPEX-RUNTIME.md.
Сокращённые формы преобразуются в основные до вычисления.
В ядре языка 205 имён встроенных процедур, собранных в одном реестре.
Чтобы понять поведение, откройте руководство по порядку вычислений.
Нужную операцию можно найти в указателе процедур.
Различайте программу, запись и действие
Каждый файл нужен для своей задачи.
| Файл или запись | Для чего используется |
|---|---|
| Исходник и его точный идентификатор | Просмотреть байты программы и указать, какую программу принимает приложение |
| Изображение Лиспекса | Передать точные байты исходника в изображении |
| Core IR | Изучить промежуточное представление с разрешёнными ссылками имён |
| Байткод | Выполнить скомпилированные инструкции в виртуальной машине, программе для их исполнения |
| Запись выполнения или отчёт сравнения | Сохранить ввод, результаты и записанные условия выполнения |
| Отчёты Ваучера об аутентификации, повторном выполнении и локальной проверке | Проверить издателя, повторно выполнить запрос и записать, принят ли он проверками получателя |
Ваучер Лиспекса связывает правило и его ввод с подписанными записями. Получатель применяет свою политику доверия и повторно выполняет запрос, прежде чем принять его локально. Вызывающее приложение решает, выполнять ли внешнее действие, например списывать плату за доставку.
У продуктов среды выполнения свои идентификаторы, профили ресурсов и записываемые результаты. Выберите продукт в каталоге. Различия реализаций описаны в справочнике сред выполнения.