Песочница

Учебный курс SICP

Выполните законченный пример на Scheme, выберите среду обучения и различайте команды SICP и обычного Лиспекса.

Вы можете изучать SICP, выполняя упражнения на Scheme с профилем языка SICP в Лиспексе. Начните с файла, который возводит число в квадрат, а затем выберите учебный сайт, CLI или JavaScript API.

SICP — это «Структура и интерпретация компьютерных программ», книга о вычислениях на языке Scheme. Лиспекс предоставляет нужные для обучения возможности Scheme в отдельном профиле языка. Профиль языка — это именованный набор поддерживаемых языковых возможностей.

Выполните первое упражнение

Установите Лиспекс по инструкции «Первая программа». Сохраните эту программу целиком в файле exercise.scm.

LISPEX
(define (square x) (* x x))
(square 12)

Запустите её из каталога с файлом.

SH
lispex sicp run exercise.scm

Вывод:

144

Команда завершается с кодом 0 и не создаёт файлов. Процедура square умножает аргумент на самого себя, поэтому (square 12) даёт 144. CLI показывает вывод программы и итоговое значение.

В оболочке POSIX тот же файл можно передать через стандартный ввод.

SH
cat exercise.scm | lispex sicp run -

Эта команда тоже выводит 144, завершается с кодом 0 и не создаёт файлов.

Выберите команду для профиля языка

SICP и обычное ядро Лиспекса — отдельные продукты среды выполнения. Профиль выбирается командой; одно лишь расширение файла его не меняет.

Обычное ядро ЛиспексаSICP в Лиспексе
Файлsquare.lspxexercise.scm
Командаlispex run square.lspxlispex 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 или новее.

SH
npm install @lispex/sicp@1.0.0

npm устанавливает версию 1.0.0 в node_modules/@lispex/sicp и записывает зависимость в файлы пакета проекта. Успешная установка завершается с кодом 0; сводка npm зависит от проекта.

Сохраните этот код в файле square.cjs в том же проекте.

JS
const { run } = require('@lispex/sicp');

const result = run('(define (square x) (* x x)) (square 12)');
console.log(result.value_display);

Запустите файл:

SH
node square.cjs

Он выводит 144, завершается с кодом 0 и не создаёт файлов. value_display — строка с результатом для отображения. Поле observation содержит структурированный результат выполнения в формате sicp-observation/v1. Поле trace содержит шаги в формате lispex-trace/v1.

В браузерном приложении, настроенном на импорт npm-пакетов и загрузку WASM-файлов, используйте браузерную точку входа.

JS
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-81 МиБ
Трасса выполнения1 024 события и 1 МиБ
Логическая куча, объём вычислений и выводФиксированные лимиты среды выполнения

API записывает происходящее во время учебного запуска. Ваучер Лиспекса предоставляет аутентификацию издателя, применение политики доверия получателя, повторное выполнение в текущих условиях и локальные проверки допуска. Вызывающее приложение решает, выполнять ли внешнее действие.

Для подробностей о совместимости откройте опубликованные данные сравнения. В них указаны поставляемый WASM, 26 примеров с фиксированной версией и результаты их запуска с записанными лимитами. Также указаны четыре внешние реализации Scheme, их измерения, расхождения и исключения. На текст книги SICP и исходники примеров для сравнения действуют отдельные лицензии. Эти материалы распространяются отдельно от пакета среды выполнения.

Текущий каталог продуктов