Scheme онлайн - IDE, редактор, компилятор, интерпретатор

RSS

Запускайте код на Scheme онлайн: определяйте функции, используйте рекурсию, списки, лямбды и хвостовые вызовы в интерпретаторе Scheme, работающем в вашем браузере.

R7RS-style Scheme (BiwaScheme 0.8) · Работает в браузере, поэтому ваш код никогда не попадает на наши серверы.
main.scmScheme
Результат

            
        
Ctrl/⌘ + Enter для запуска

Возможности онлайн-компилятора Scheme (IDE, редактор и интерпретатор)

Пишите, запускайте и тестируйте код на Scheme онлайн бесплатно. Эта страница — онлайн-IDE, редактор кода, компилятор и интерпретатор Scheme в одном: введите код, нажмите «Запустить» и сразу увидите результат. Все работает в браузере — ничего не нужно устанавливать и не нужно создавать аккаунт.

  • Мгновенный запуск кода: R7RS-style Scheme (BiwaScheme 0.8), вывод менее чем за секунду после первой загрузки.
  • Редактор кода: подсветка синтаксиса, номера строк, подсветка парных скобок и автозакрытие скобок.
  • Понятные ошибки: сообщения об ошибках и предупреждения появляются в панели вывода так же, как на вашем компьютере.
  • Полноэкранный режим: Ctrl/⌘ + Shift + F, настраиваемый размер шрифта, расположение рядом или друг под другом и изменяемые размеры панелей.
  • Автосохранение: ваш код хранится в браузере; скачайте его как main.scm или скопируйте одним щелчком.
  • Безопасные эксперименты: ограничение времени и кнопка «Остановить» прерывают бесконечные циклы.
  • Конфиденциальность: среда выполнения Scheme работает на вашем устройстве, поэтому код никогда не загружается на сервер.
  • Темная тема и сочетания клавиш: Ctrl/⌘ + Enter запускает код.
  • Бесплатно: без регистрации и ограничений использования.

Изучайте другие языки программирования

Как пользоваться онлайн-интерпретатором Scheme

  1. Напишите или вставьте код на Scheme в редактор. Кнопка Сбросить пример возвращает стартовую программу, которая выводит факториал, первые десять чисел Фибоначчи и сумму квадратов.
  2. Нажмите Запустить или используйте Ctrl + Enter (⌘ + Enter на Mac).
  3. Текст, выведенный с помощью display, write и newline, появляется на панели Результат. Когда программа завершается, значение последнего выражения выводится в виде => значение, если только оно не является неопределённым. Об ошибках сообщается собственным текстом BiwaScheme.
  4. Выберите ограничение времени — 5, 15 или 60 секунд. Бесконечный цикл останавливается автоматически, а кнопка Остановить немедленно прекращает запуск.

Интерпретатор занимает всего около 0,3 МБ, поэтому страница готова почти сразу. Кнопки Копировать и main.scm сохраняют вашу программу, а Полноэкранный режим (Ctrl/⌘ + Shift + F, выход — Esc) отдаёт редактору всё окно.

Ваш код выполняется в Web Worker внутри браузера и никогда не отправляется на сервер. Редактор автоматически сохраняет вашу последнюю программу в локальном хранилище браузера отдельно для каждого компилятора на этом сайте.

О Scheme и BiwaScheme

Scheme — небольшой диалект Lisp. Программы состоят из выражений в скобках, функции — обычные значения, а рекурсия — привычный способ организовать цикл. Крошечное ядро делает его популярным учебным языком для замыканий, функций высшего порядка и интерпретаторов.

На этой странице работает BiwaScheme 0.8.3 — интерпретатор Scheme, написанный на JavaScript. По духу он следует стандартам R6RS и R7RS и охватывает самые распространённые возможности Scheme. Однако он не является полной реализацией ни одного из этих стандартов.

Что поддерживается

  • Основные формы: define, lambda, let, let*, letrec, if, cond, begin и set!.
  • Списки и функции высшего порядка: cons, car, cdr, list, map, apply и квотированные данные вроде '(1 2 3).
  • Полноценная оптимизация хвостовых вызовов, поэтому циклы, записанные как именованный let или хвостово-рекурсивные функции, выполняются с постоянным размером стека.

Ограничения:

  • Нет поля ввода. Тестовые данные вписывайте прямо в программу.
  • Это не полная реализация стандарта. Процедуры, специфичные для других Scheme, например MIT Scheme, Racket или Guile, могут отсутствовать.
  • Выполняется только код из редактора. Загружать файлы нельзя, менеджера пакетов нет.

Пример: рекурсия и именованный let

;; Обычная рекурсия: каждый вызов ждёт, пока вернётся следующий.
(define (sum-list lst)
  (if (null? lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

;; Именованный let: хвостово-рекурсивный цикл с накопителем.
(define (sum-to n)
  (let loop ((i 1) (acc 0))
    (if (> i n)
        acc
        (loop (+ i 1) (+ acc i)))))

(display (sum-list '(1 2 3 4))) (newline)   ; 10
(sum-to 100000)                             ; => 5000050000

Последнее выражение не выводится, поэтому его значение появляется как => 5000050000. sum-list накапливает отложенные сложения, а sum-to вызывает loop в хвостовой позиции и работает как цикл while.

Типичные ошибки

  • Забыли квотировать список. (1 2 3) пытается вызвать 1 как функцию и завершается ошибкой. Пишите '(1 2 3) или (list 1 2 3). Это разные вещи: '(a b) — список из символов a и b, а (list a b) вычисляет переменные.
  • define и let. define на верхнем уровне создаёт глобальное имя. let создаёт локальные имена, существующие только внутри его тела. Внутри обычного let одна привязка не может ссылаться на другую, поэтому используйте let*, когда последующее значение зависит от предыдущего.
  • display и write. display выводит строки без кавычек. write их сохраняет, что помогает при отладке данных.
  • Равенство. Используйте = для чисел, eq? для символов и equal?, чтобы сравнивать списки или строки по содержимому.

Часто задаваемые вопросы

Это компилятор или интерпретатор Scheme?

Интерпретатор. BiwaScheme выполняет вашу программу прямо в браузере, без отдельного этапа компиляции.

Какой стандарт Scheme поддерживается?

BiwaScheme по духу следует R6RS и R7RS и охватывает самые распространённые возможности. Стандартный учебный код с define, lambda, let, cond, списками и рекурсией работает как ожидается. Код, зависящий от библиотек конкретной реализации, может потребовать правок.

Можно ли использовать его для SICP или учебных заданий?

Да, для заданий на основе базовой части Scheme. Если в задании используется неопределённая процедура, напишите её упрощённую версию сами в начале программы.

Почему моя программа ничего не выводит?

Вывод создают только display, write и newline, а также строка => со значением последнего выражения. Программа, которая заканчивается на define, не показывает значения, потому что этот результат не определён.

На каких ещё языках можно запускать код онлайн?

Попробуйте онлайн-компилятор Clojure для другого Lisp, онлайн-компилятор Prolog для логического программирования или посмотрите все онлайн-компиляторы.

Обновлено

Скопировано в буфер обмена