Готовим рабочую среду для изучения SICP

12 March 2012 #mac#lisp#textmate#sicp

В очередной раз обратил свое внимание на книгу Харольда Абельсона и Джеральда Джей Сассмана “Структура и интерпретация компьютерных программ”. Давно уже пытался ее прочесть, но каждый раз сталкивался с тем, что не мог нормально использовать scheme – один из диалектов языка lisp.

Во-первых, нужно найти реализацию scheme, что работает под mac os. Как оказалось, сделать это очень просто, так как homebrew содержит в себе формулы для установки целого ряда диалектов. Я выбрал guile:

$ brew install guile

Теперь можно из командной строки запускать интерпретатор и пробовать его в работе. Однако редактор самого интерпретатора ограничен командной строкой, что делает очень неудобным использование объемных функций. Тут встал вопрос по выбору редактора.

Это второй довольно важный момент. Естественно возникает вариант использования Emacs, ведь это и есть интерпретатор Lisp-кода. Но проблема в том, что он использует свой диалект языка – elisp. А для использования того же guile приходиться довольно долго его настраивать. Обратил внимание на Textmate. Это специализированный редактор кода для Mac, очень удобный, хотя и стоит денег.

Как оказалось, по умолчанию в textmate отсутствует поддержка scheme. Но есть целый набор репозиториев github.com/textmate, которые содержат в себе необходимые расширения, добавляющие поддержку нужных языков. Для scheme это scheme.tmbundle. Осталось его установить. Для этого в консоли совершаем следующие операции:

$ mkdir -p ~/Library/Application\ Support/TextMate/Bundles
$ cd ~/Library/Application\ Support/TextMate/Bundles
$ git clone https://github.com/textmate/scheme.tmbundle.git

На офсайте Textmate рекомендуют проводить установку в системную директорию Libarary, но так как на моей машинке один пользователь, я ставлю в домашнюю папку. После совершения указанных операций нужно или перезагрузить Textmate или дать следующую команду в терминале:

$ osascript -e 'tell app "TextMate" to reload bundles'

Теперь Textmate умеет работать с языком Scheme, умеет раскрашивать код, делать отступы и умеет запускать код с использованием горячих клавиш.

Но и здесь возникает небольшая проблема. Заключается она в том, что после установки Guile с помощью Homebrew, его не находит Textmate. Решается эта проблема просто – нужно в настройках программы указать в переменной PATH пути до brew, то есть:

/usr/locale/bin:/usr/locale/sbin 

Так же рекомендуется в настройках Textmate создать переменную TM_SCHEME_INTERPRETER и ей присвоить значение guile.

Теперь запуск кода будет проходить без ошибок. Но! Мы не будем видеть результата работы, так как это описывается в книге. Происходит это потому, что интерпретатор работает в различных режимах. В книге он используется именно в режиме интерпретатора, мы же в Textmate используем его в режиме обработки скрипт-файлов. Для решения данной проблемы просто придется использовать оператор display, который предусмотрен языком guile.

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