Giter VIP home page Giter VIP logo

ilammy / lisp Goto Github PK

View Code? Open in Web Editor NEW
189.0 20.0 23.0 28.78 MB

Lisp In Small Pieces на русском языке

Home Page: https://ilammy.github.io/lisp

License: Other

TeX 27.05% Shell 0.03% CSS 0.29% Python 0.12% Scheme 10.84% BlitzBasic 3.60% Scilab 1.29% Scala 1.99% C 1.77% Batchfile 0.02% HTML 40.52% Makefile 0.81% Perl 0.17% Raku 11.33% Racket 0.15% OpenEdge ABL 0.01% JavaScript 0.02%

lisp's Introduction

Интерпретация Лиспа и Scheme

Это перевод на русский язык «широко известной в узких кругах» книги Кристиана Кеннека «Les Langages Lisp» (aka Lisp in Small Pieces). Книга затрагивает основы построения интерпретаторов и компиляторов Лиспа (в первую очередь его диалекта Scheme), а также разнообразие вариантов понимания семантики его конструкций и возможностей вроде окружений, замыканий, исключений, продолжений, рефлексии и макросов.

Готовые сборки

В гитхабовских релизах доступны предварительно собранные варианты:

  • lisp_a4.pdf — PDF под формат A4;
  • lisp-*pt.epub — reflowable EPUB с соответствующим размером шрифта.

На Github Pages хостится web-based версия.

Что где валяется

Файл Содержимое
build.* билд-скрипты
makeindex.py скрипт, формирующий предметный указатель
book-src/ исходный текст книги; содержимое файлов самоочевидно
epub/ исходный текст книги, структура EPUB-контейнера, шрифты
epub/fontconfig CSS с настройками для разных базовых размеров шрифта
scm-src/ копия исходных текстов программ, прилагаемых к книге

Сборка

Для сборки необходимы pdfLaTeX и Python 2.7. Запускаете из корневой директории простенький скрипт build.sh или build.bat и ждёте, пока LaTeX сделает три прохода по тексту. Забираете lisp.pdf из корневой директории.

Python необходим для генерации предметного указателя. Обеспечьте, пожалуйста, запускаемость интерпретатора по команде python.

Скрипты не устанавливают необходимые LaTeX-пакеты. Ожидается, что они или уже доступны, или что ваш дистрибутив LaTeX автоматически их выкачает из CTAN при сборке документа.

Сборка проверена в Debian 7.0 (TeX Live) и Windows (MiKTeX 2.9). Для Windows необходимо установить MiKTeX, установить для него CM-Super и PSCyr (0.4d-beta9), остальное выкачивается автоматически. Для Debian достаточно сделать

sudo aptitude install cm-super texlive-lang-english texlive-lang-french \
    texlive-lang-cyrillic texlive-latex-base texlive-latex-recommended  \
    texlive-latex-extra texlive-pictures

И установить PSCyr вручную.

Шрифты из пакета PSCyr используются только для буквиц и титульной страницы, так что при желании от этой зависимости можно легко избавиться без значительного ущерба для качества. Если желания нет, то удачи с установкой:

Сборка EPUB

Для этого дополнительно потребуются Imagemagick и Ghostscript (для конвертации иллюстраций в PNG), и Info-ZIP (для упаковки результата в EPUB-контейнер). Для сборки вызывайте скрипты с опцией epub. Забираете пачечку lisp-*pt.epub из корневой директории.

Конвертилка Imagemagick должна быть доступна по команде convert. Info-ZIP — по команде zip.

Сборка проверена в Debian 7.0 (Imagemagick 6.7.7, Ghostscript 9.05, Info-ZIP 3.0) и Windows (Imagemagick 6.8.7, Ghostscript 9.10, Info-ZIP 3.0).


Контакты

Домашняя страница профессора Кеннека (клац), его электронный адрес: [email protected]

Оригинал исходных кодов из scm-src можно скачать одним архивом отсюда.

Если вас смущает GitHub или вы не способны отыскать в Гугле мой личный имейл и домашний адрес, то можете слать жалобы, угрозы и предложения сюда: [email protected]

Лицензирование и прочая шушера

По соглашению с автором книги, данный перевод распространяется под лицензией CC BY-ND 3.0 (см. файл LICENSE с копией).

Таким образом, вы можете свободно:

  • делиться — копировать, распространять и передавать другим лицам данное произведение;

  • использовать произведение в коммерческих целях.

При обязательном соблюдении следующих условий:

  • «Атрибуция» — вы должны атрибутировать произведение, указав любым удобным образом название книги, имя автора (Кристиан Кеннек, Christian Queinnec), имя переводчика (ilammy), а также дав ссылку на этот репозиторий: https://github.com/ilammy/lisp.

  • «Без производных произведений» — вы не можете изменять, преобразовывать или брать за основу это произведение.

Пользуясь правом уточнения лицензии, лично я не считаю производными работами форки с целью исправления орфографических, пунктуационных ошибок, факапов в формулах и исходных кодах, а также иных внешних недочётов, не влияющих на смысловое наполнение. И этим даю своё разрешение (и даже поощряю их создание) при условии оформления соответствующих пулл-реквестов.

Естественно, производными работами также не считается перевод LaTeX-исходников в другой формат, перевёрстка, перерисовка иллюстраций и любые оформительские изменения, необходимые для адекватной передачи содержимого книги на другом носителе.

За разрешением на всё прочее (сокращение, перевод, создание комиксов по мотивам и т. п.), пожалуйста, обращайтесь к автору книги; он не кусается, его имейл чуть выше. Лично я не против любого использования, но я не вправе это решать самостоятельно.

Также CC BY-ND распространяется исключительно на содержимое книги: текст и иллюстрации, а также на файлик с текстом лицензии. LaTeX-макросы сами по себе, makeindex.py и всё остальное, не имеющее непосредственного отношения к контенту книги, распространяется на условиях WTFPL (читай: находится в общественном достоянии).

Исходные коды программ, находящихся в scm-src и приведённых в тексте книги, распространяются на условиях, описанных в scm-src/README. Директория scm-src является зеркалом оригинальных исходников, сделанныи исключительно ради удобства. Никаких изменений в него не вносилось.

lisp's People

Contributors

arbv avatar grossws avatar ilammy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lisp's Issues

Не хватает "и"

Раздел: 7.10.2.Собираем приложение

Предложение:
"После сборки всех объектных файлов остаётся только создать записать результат в исполнимый файл."

Наверное, не хватает "и" между словами "создать" и "записать".

Перевод в Pollen

Как бы мне ни нравился LaTeX... объективно говоря, это legacy-формат. Семь лет тому назад мне очень даже нравилось гоняться за point-perfect PDF-файлами для печати на бумаге, но времена меняются.

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

  • Перевести весь текст в Pollen
    • Предисловие
    • Глава 1
      • 1.1
      • 1.2
      • 1.3
      • 1.4
        • 1.4.1
        • 1.4.2
        • 1.4.3
        • 1.4.4
        • 1.4.5
        • 1.4.6
      • 1.5
      • 1.6
        • 1.6.1
        • 1.6.2
      • 1.7
      • 1.8
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 2
      • 2.1
      • 2.2
        • 2.2.1
        • 2.2.2
        • 2.2.3
        • 2.2.4
      • 2.3
      • 2.4
      • 2.5
        • 2.5.1
        • 2.5.2
        • 2.5.3
        • 2.5.4
      • 2.6
        • 2.6.1
        • 2.6.2
        • 2.6.3
        • 2.6.4
        • 2.6.5
        • 2.6.6
      • 2.7
      • 2.8
      • Упражнения
      • Ответы к упражнениям
    • Глава 3
      • 3.1
        • 3.1.1
        • 3.1.2
        • 3.1.3
        • 3.1.4
        • 3.1.5
        • 3.1.6
      • 3.2
        • 3.2.1
        • 3.2.2
        • 3.2.3
        • 3.2.4
        • 3.2.5
        • 3.2.6
        • 3.2.7
      • 3.3
      • 3.4
        • 3.4.1
        • 3.4.2
        • 3.4.3
        • 3.4.4
      • 3.5
      • 3.6
        • 3.6.1
        • 3.6.2
      • 3.7
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 4
      • 4.1
        • 4.1.1
        • 4.1.2
        • 4.1.3
      • 4.2
        • 4.2.1
        • 4.2.2
      • 4.3
        • 4.3.1
        • 4.3.2
        • 4.3.3
        • 4.3.4
        • 4.3.5
        • 4.3.6
        • 4.3.7
        • 4.3.8
        • 4.3.9
        • 4.3.10
        • 4.3.11
        • 4.3.12
        • 4.3.13
        • 4.3.14
      • 4.4
      • 4.5
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 5
      • 5.1
      • 5.2
        • 5.2.1
        • 5.2.2
        • 5.2.3
        • 5.2.4
        • 5.2.5
        • 5.2.6
        • 5.2.7
        • 5.2.8
      • 5.3
      • 5.4
      • 5.5
      • 5.6
      • 5.7
        • 5.7.1
        • 5.7.2
        • 5.7.3
      • 5.8
      • 5.9
        • 5.9.1
        • 5.9.2
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 6
      • 6.1
        • 6.1.1
        • 6.1.2
        • 6.1.3
        • 6.1.4
        • 6.1.5
        • 6.1.6
        • 6.1.7
        • 6.1.8
        • 6.1.9
        • 6.1.10
      • 6.2
        • 6.2.1
        • 6.2.2
        • 6.2.3
        • 6.2.4
        • 6.2.5
        • 6.2.6
      • 6.3
        • 6.3.1
        • 6.3.2
        • 6.3.3
        • 6.3.4
        • 6.3.5
        • 6.3.6
        • 6.3.7
        • 6.3.8
        • 6.3.9
        • 6.3.10
        • 6.3.11
        • 6.3.12
        • 6.3.13
        • 6.3.14
        • 6.3.15
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 7
      • 7.1
        • 7.1.1
        • 7.1.2
        • 7.1.3
        • 7.1.4
      • 7.2
        • 7.2.1
      • 7.3
      • 7.4
        • 7.4.1
        • 7.4.2
        • 7.4.3
        • 7.4.4
        • 7.4.5
      • 7.5
        • 7.5.1
      • 7.6
      • 7.7
      • 7.8
      • 7.9
      • 7.10
        • 7.10.1
        • 7.10.2
        • 7.10.3
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 8
      • 8.1
      • 8.2
        • 8.2.1
      • 8.3
      • 8.4
      • 8.5
        • 8.5.1
        • 8.5.2
      • 8.6
        • 8.6.1
        • 8.6.2
        • 8.6.3
        • 8.6.4
        • 8.6.5
        • 8.6.6
      • 8.7
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 9
      • 9.1
        • 9.1.1
        • 9.1.2
      • 9.2
        • 9.2.1
        • 9.2.2
      • 9.3
      • 9.4
      • 9.5
      • 9.6
        • 9.6.1
        • 9.6.2
        • 9.6.3
        • 9.6.4
        • 9.6.5
      • 9.7
      • 9.8
      • 9.9
        • 9.9.1
        • 9.9.2
      • 9.10
      • 9.11
        • 9.11.1
        • 9.11.2
        • 9.11.3
        • 9.11.4
        • 9.11.5
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 10
      • 10.1
      • 10.2
      • 10.3
      • 10.4
      • 10.5
      • 10.6
      • 10.7
      • 10.8
        • 10.8.1
        • 10.8.2
        • 10.8.3
        • 10.8.4
        • 10.8.5
        • 10.8.6
        • 10.8.7
        • 10.8.8
      • 10.9
        • 10.9.1
        • 10.9.2
        • 10.9.3
      • 10.10
        • 10.10.1
        • 10.10.2
        • 10.10.3
      • 10.11
        • 10.11.1
        • 10.11.2
      • 10.12
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Глава 11
      • 11.1
      • 11.2
      • 11.3
      • 11.4
      • 11.5
        • 11.5.1
        • 11.5.2
        • 11.5.3
        • 11.5.4
        • 11.5.5
        • 11.5.6
        • 11.5.7
      • 11.6
      • 11.7
      • 11.8
      • 11.9
      • Заключение
      • Упражнения
      • Рекомендуемая литература
      • Ответы к упражнениям
    • Библиография
    • Предметный указатель
  • Перерисовать изображения в (?) SVG
  • Программирование Pollen
    • Автоматическая нумерация
    • Перекрёстные ссылки
    • Конверсия денотаций в пятой главе
    • Предметный указатель
  • Набор и вёрстка текста
  • Набор и рендеринг формул
  • Вычитка ещё разок, и ещё, и ещё...
  • Найми редактора и/или корректора?
  • Интерактивные примеры кода
  • Проверь, что все примеры работают правильно
    • Оригинальный код распространяется с тестами, можешь использовать их
  • (?) Больше изображений для повышения наглядности и ингейджмента™
  • Новая лицензия для кода
    • Cirno public license, please make it happen
    • beware that the original WTFPL may be considered unforceable so base it on something like MIT or BSD
  • Сделать новый дом web-версии
  • (?) Рендеринг в *.gmi (нет — больше понтов и геморроя, чем пользы)
  • Микроформаты! Превьюшки до социалочек, отэтовотвсё
  • Reader mode чтобы работал тоже
  • Оффлайн-бандл, чтоб скачал и без интернета читать дальше
  • Дополнительно, формат с главой на одной странице (будет полезно для корректоров). А также вся книга на одной странице.
  • Плашка об устаревании на старой версии (но ради бога, смотри не побей URL)
  • (?) Новое название
    • Лисп: Интерпретация и Семантика Программ

Раздел 1.6.1 Лексическая и динамическая область видимости

Ошибка же в комментариях, они не должны быть поменяны местами?

 (define (foo x) (list x y))
 (define (bar y) (foo 1991))

В лексическом Лиспе переменная y в foo — это всегда ссылка на глобальную переменную y, которая не имеет никакого отношения к y внутри bar. В динамическом же Лиспе переменная y из bar будет видима в foo внутри bar, потому что в момент вызова foo переменная y уже находилась в текущем окружении. Следовательно, если мы дадим глобальной y значение 0, то получим следующие результаты:

(define y 0)
(list (bar 100) (foo 3)) → ((1991 0) (3 0))   ; в динамическом Лиспе
(list (bar 100) (foo 3)) → ((1991 100) (3 0)) ; в лексическом Лиспе

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.