LISP In Small Pieces — лучшая среда LISP для запуска кода?

Кристиан Квиннек написал шедевр под названием LISP In Small Pieces, в котором представлены одиннадцать интерпретаторов Лиспа и два компилятора Лиспа.

Когда вы переходите к скачиванию кода с сайта здесь - он имеет комментарий:

The programs of this book are available on the net. 
These programs used to run with some Scheme systems around 1994.

Есть идеи:

(a) На каких системах Схемы они работали в то время и, что более важно;

(b) На каких системах Схемы они будут работать сегодня?


person hawkeye    schedule 28.04.2012    source источник
comment
Почему бы вам просто не установить рэкет и не попробовать запустить несколько программ?   -  person Dan D.    schedule 28.04.2012
comment
Я использую guile en.wikipedia.org/wiki/GNU_Guile или Kawa en.wikipedia.org/wiki/Kawa_(Scheme_implementation)   -  person jcubic    schedule 28.04.2012
comment
@jcubic Итак, программы из этой книги вам помогли?   -  person hawkeye    schedule 28.04.2012
comment
@hawkeye нет, я просто что сказать, что в качестве реализации схемы в моем повседневном использовании я использую эти реализации. Одно замечание: если код, который вы пытаетесь запустить, имеет скобки вместо родителя в некоторых местах, как в let, то он будет работать только на drScheme или racket, а drScheme не является реальной схемой, потому что настоящая схема не использует скобки.   -  person jcubic    schedule 28.04.2012
comment
@jcubic Это немного грубо. Несмотря на мое мнение о квадратных скобках, он является частью R6RS и долгое время использовался в ряде крупных реализаций (таких как Chez и Racket). Вы не можете сказать, что они не являются реальными реализациями Scheme.   -  person Chris Jester-Young    schedule 28.04.2012
comment
Это не работает на хитрости или каве, а Raket - это другой язык (википедия говорит, что на него повлияли Scheme и Eiffel), это не схема. и брекет для меня больше похож на clojure, чем на схему или лисп, который должен быть создан из S-Expressions, но это только мое мнение. Я только хотел сказать, что когда я изучал схему, я прочитал одну книгу, где единственной реализацией, в которой я могу запустить эти примеры, была drScheme, поэтому я нашел другую книгу,   -  person jcubic    schedule 28.04.2012
comment
На самом деле, Guile по умолчанию принимает квадратные скобки для более двух лет.   -  person Asumu Takikawa    schedule 29.04.2012
comment
@jcubic Chicken также необязательно принимает квадратные скобки. Мне лично не нравится этот стиль, но на данный момент он действительно кажется предпочтительным.   -  person robbyphillips    schedule 03.05.2012
comment
@AsumuTakikawa К какой версии он принадлежит, я использую хитрость 1.8.7, и этот (let ([x 10]) (* x x)) выбрасывает Bad binding [x in expression (let ([x 10]) (* x x)). ABORT: (syntax-error) то же самое, если я вызываю [* 10 20], он выбрасывает Unbound variable: [* отображает 10, а затем бросает Unbound variable: 20]   -  person jcubic    schedule 03.05.2012
comment
@jcubic Судя по датам выпуска, Guile 1.8.8 начал принимать квадратные скобки.   -  person Asumu Takikawa    schedule 03.05.2012


Ответы (5)


Там много программ. Я сделал несколько тестов, чтобы увидеть, насколько хорошо я могу ответить на этот вопрос, не проверяя их по отдельности. В архиве 131 файл с расширением ".scm". Однако существуют программы Scheme с другими расширениями, такими как .bgl. Поэтому я провел поиск файлов, содержащих «L i S P» в первых пяти строках. Это дает 173 файла. Я попытался запустить все это в моей предпочтительной реализации схемы. 31 из них выполняются без ошибок. Почти все они находятся в каталоге «src». Таким образом, языковые программы действительно кажутся языково-специфичными. Давайте посмотрим на один из сбойных файлов src/, "chap9z.scm". Он задыхается от define-abbreviation. Я не знаю происхождения этого символа, но он нигде не определяется хитростью. Но все его применения могут быть выполнены хитростью syntax-rules.

person gcbenison    schedule 01.05.2012
comment
Бьюсь об заклад, что define-abbreviation определен как макрос где-то еще в источнике. - person Sam Tobin-Hochstadt; 02.05.2012
comment
Я смотрел, но не нашел. Мне нужен grep на основе секса (а не строки)! - person gcbenison; 02.05.2012
comment
@gcbeison, похоже, это определено в частях, специфичных для платформы. Например, см. elk/book.elk, где он определяется через вызов expand-syntax. - person Sam Tobin-Hochstadt; 02.05.2012
comment
Это потрясающе - вы приложили очень много усилий, чтобы ответить на вопрос. - person hawkeye; 02.05.2012

Некоторые реализации Схемы, существовавшие в 1994 году, до сих пор используются и поддерживаются: Схема 48, Схема Chez, Гамбит, Bigloo, схема MIT и SCM.

Вероятно, код из LiSP будет работать в других современных системах Scheme, таких как Guile или Воровство.

Лично я бы рекомендовал использовать Racket. Скорее всего, большая часть кода будет работать в #lang racket без изменений, и нет необходимости использовать [] (но ваш код может быть легче читать :). То, что не работает, вероятно, легко исправить, и вы также можете использовать реализацию языка R5RS, предоставленную Racket, которая, вероятно, будет работать для всего кода.

person Sam Tobin-Hochstadt    schedule 30.04.2012
comment
Код (по крайней мере, из главы 1) не работает «как есть» в рэкете #lang из-за того, что ячейки con не изменяемы. - person PuercoPop; 25.06.2014
comment
Вероятно, вы можете запустить его в режиме r5rs (либо выберите этот язык в DrRacket, либо используйте plt-r5rs исполняемый файл, or add #lang r5rs` в верхней части файла). - person Sam Tobin-Hochstadt; 25.06.2014

(a) На каких системах Scheme они работали в то время

Makefile в архиве с исходным кодом от автора на веб-сайте есть цели для запуска кода под bigloo, elk, gambit, mit-scheme, Scheme2c и scm.

В Makefile упоминаются SCM 4e1 и Bigloo 1.9d как известные рабочие версии, хотя я сам их не тестировал. Я не нашел никаких упоминаний о конкретных версиях для других схем.

(b) На каких системах Схемы они будут работать сегодня?

Код в этом репозитории github был обновлен, так что почти все тесты в включенный набор тестов проходит с текущими (по состоянию на 06/2014) версиями bigloo, gambit и mit-scheme.

Если вы просто хотите иметь возможность запускать код и следовать книге, одна из этих схем должна вам подойти.

[полное раскрытие: я владелец репо и я нуб схемы. Код в репозитории: Сертификат WOMM, но ваш пробег может отличаться.]

Если, с другой стороны, вас не устраивает использование схемы bigloo/gambit/mit, не составит труда добавить сюда поддержку guile/racket/insert-favorite-scheme. Используйте один из файлов book.* в качестве отправной точки, например. gambit/book.scm или mitscheme/book.mit. Если вы можете загрузить версию book.scm в свою любимую схему, взгляните на цель make test.interpreters и, наконец, на цель grand.test, чтобы убедиться, что все работает должным образом.

person Community    schedule 25.06.2014

Во включенном файле README указано:

Эти файлы были протестированы с помощью интерпретатора Scheme, дополненного драйвером набора тестов (tester.scm), макросами определения синтаксиса и определения аббревиатуры (с использованием пакета синтаксиса случая Dybvig) и системой объектов: Meroonet (meroonet.scm) .

Можно использовать Bigloo, Scheme->C, Gambit, Elk или SCM. Первые три лучше, так как может быть построен специализированный интерпретатор, содержащий скомпилированный Meroonet и скомпилированные гигиенические макросы.

person kmkaplan    schedule 02.05.2012

Судя по всему, Appleby опубликовала обновленную версию исходного кода. Ракетки не хватает )=

См. https://github.com/appleby/Lisp-In-Small-Pieces

person PuercoPop    schedule 04.07.2014