Вы можете изучать SICP, выполняя упражнения на Scheme с профилем языка SICP в Лиспексе. Начните с файла, который возводит число в квадрат, а затем выберите учебный сайт, CLI или JavaScript API.
SICP — это «Структура и интерпретация компьютерных программ», книга о вычислениях на языке Scheme. Лиспекс предоставляет нужные для обучения возможности Scheme в отдельном профиле языка. Профиль языка — это именованный набор поддерживаемых языковых возможностей.
Выполните первое упражнение
Установите Лиспекс по инструкции «Первая программа».
Сохраните эту программу целиком в файле exercise.scm.
(define (square x) (* x x))
(square 12)Запустите её из каталога с файлом.
lispex sicp run exercise.scmВывод:
144Команда завершается с кодом 0 и не создаёт файлов.
Процедура square умножает аргумент на самого себя, поэтому (square 12) даёт 144.
CLI показывает вывод программы и итоговое значение.
В оболочке POSIX тот же файл можно передать через стандартный ввод.
cat exercise.scm | lispex sicp run -Эта команда тоже выводит 144, завершается с кодом 0 и не создаёт файлов.
Выберите команду для профиля языка
SICP и обычное ядро Лиспекса — отдельные продукты среды выполнения. Профиль выбирается командой; одно лишь расширение файла его не меняет.
| Обычное ядро Лиспекса | SICP в Лиспексе | |
|---|---|---|
| Файл | square.lspx | exercise.scm |
| Команда | lispex run square.lspx | lispex sicp run exercise.scm |
| Назначение | Обычные программы Лиспекса | Изучение SICP и упражнения |
| Песочница | Профиль по умолчанию | ?profile=sicp |
| Среда | Исполнитель ядра Лиспекса | Профиль на Rust, встроенный в Native; WASM @lispex/sicp в npm и JavaScript |
Чтобы попробовать команду ядра, сохраните ту же программу выше как square.lspx.
Она тоже выводит 144, завершается с кодом 0 и не создаёт файлов.
Если выполнить lispex run exercise.scm, команда выведет ошибку и завершится с кодом 2:
lispex run: .scm requires `lispex sicp run <file.scm>`При неудаче выполнение SICP останавливается на выбранном исполнителе.
Повторного запуска на другом исполнителе нет.
npm CLI lispex использует для SICP отдельный пакет @lispex/sicp@1.0.0.
Выберите, где учиться
- sicp.io предлагает уроки по главам, редактируемые примеры, результаты выполнения и карту поддерживаемых тем. Курсы доступны на английском, корейском и русском.
- Песочница SICP выполняет упражнения в браузере.
Параметр адреса
profile=sicpвыбирает SICP; обычная песочница использует профиль ядра. - CLI выполняет локальные файлы, такие как
exercise.scm. - JavaScript API возвращает результат и трассу выполнения для использования в приложении. Трасса — это запись шагов вычисления.
Используйте JavaScript API
Для прямого обращения к API установите пакет в проект с Node.js 18 или новее.
npm install @lispex/sicp@1.0.0npm устанавливает версию 1.0.0 в node_modules/@lispex/sicp и записывает зависимость в файлы пакета проекта.
Успешная установка завершается с кодом 0; сводка npm зависит от проекта.
Сохраните этот код в файле square.cjs в том же проекте.
const { run } = require('@lispex/sicp');
const result = run('(define (square x) (* x x)) (square 12)');
console.log(result.value_display);Запустите файл:
node square.cjsОн выводит 144, завершается с кодом 0 и не создаёт файлов.
value_display — строка с результатом для отображения.
Поле observation содержит структурированный результат выполнения в формате sicp-observation/v1.
Поле trace содержит шаги в формате lispex-trace/v1.
В браузерном приложении, настроенном на импорт npm-пакетов и загрузку WASM-файлов, используйте браузерную точку входа.
const { createSicpRuntime } = await import('@lispex/sicp/browser');
const runtime = await createSicpRuntime();
const result = runtime.run('(define (square x) (* x x)) (square 12)');
console.log(result.value_display);В консоли браузера появится 144.
Разберитесь с лимитами и записями
Модуль WASM не имеет внешних импортов. После загрузки выбранный исполнитель работает в памяти. Оператор приложения настраивает изоляцию процесса и сети.
| Ресурс | Лимит |
|---|---|
| Исходник UTF-8 | 1 МиБ |
| Трасса выполнения | 1 024 события и 1 МиБ |
| Логическая куча, объём вычислений и вывод | Фиксированные лимиты среды выполнения |
API записывает происходящее во время учебного запуска. Ваучер Лиспекса предоставляет аутентификацию издателя, применение политики доверия получателя, повторное выполнение в текущих условиях и локальные проверки допуска. Вызывающее приложение решает, выполнять ли внешнее действие.
Для подробностей о совместимости откройте опубликованные данные сравнения. В них указаны поставляемый WASM, 26 примеров с фиксированной версией и результаты их запуска с записанными лимитами. Также указаны четыре внешние реализации Scheme, их измерения, расхождения и исключения. На текст книги SICP и исходники примеров для сравнения действуют отдельные лицензии. Эти материалы распространяются отдельно от пакета среды выполнения.