Регистрация | Войти
Lisp — программируемый язык программирования
Книга по Lisp
Symbol - 29.09.2010 06:07, Сообщений - 190
Добрый день!
Меня зовут Павел Шалин, я работаю Ведущим редактором в издательстве Символ-Плюс. На нашем форуме читатели неоднократно просили издательство выпустить какую-нибудь книгу по Common Lisp, однако, поискав в Интернете, мы обнаружили несколько изданий, опубликованных в свободном доступе, например, Practical Common Lisp издательства Apress. Вместе с тем, мы могли бы издать на русском языке, например, вот эту книгу: ANSI Common LISP.

В связи с этим у меня вопрос к уважаемым специалистам: стоит ли, по Вашему мнению, выпускать на русском это издание, или вполне достаточно тех переводов, которые уже опубликованы в Интернете? Какие еще книги по Lisp Вы бы порекомендовали к изданию (и почему именно их)?
Ваше мнение очень важно для нас.
Заранее - большое спасибо!
Страницы: 1234
[#] Ответ на комментарий от LinkFly 07.12.2012 14:22
> А что за ДМК-Пресс? 

http://alexott-ru.blogspot.ru/2012/12/blog-post.html

archimag - 07.12.2012 16:29
[#] Ответ на комментарий от archimag 07.12.2012 16:29
В рассылке books.ru прислали рекламу о подаже электронных книг по свободной цене.
"Плати сколько хочешь", вроде того.

Обсуждаемая книга в т.ч.:
http://www.books.ru/books/ansi-common-lisp-3127808/

За тысячу - дороговато, а вот электронную книгу рублей за 200 купить очень даже неплохо!
dmitrys99 - 13.12.2012 19:57
[#] Ответ на комментарий от dmitrys99 13.12.2012 19:57
Заказал на бумаге. Через неделю придет.
Подарок на день рождения от жены.
somequestions - 14.12.2012 15:47
[#] Ответ на комментарий от dmitrys99 13.12.2012 19:57
Заплатил чисто символическую цену за электронную копию, так как бумажную уже купил.
Andreamedis - 16.12.2012 15:04
[#]
Ура! Ко мне только что принесли бумажный русский перевод, а незадолго до того купил электронную версию, и она мне очень понравилась. В дополнение ко всему, я уже являлся обладателем оригинальной бумажной книги на английском, но решил "материально поддержать отечественного производителя" :)
dsorokin - 25.12.2012 08:22
[#]
Книжка-то не очень. До покупки этого перевода её не читал. Слишком уж "для начинающих". Вот On Lisp показалась куда более интересной.
Не хватает чего-нибудь эдаково. "Let over lambda" самое то.

"Как с помощью cons, car и такой-то матери сделать cdr", например. :)
andy128k - 26.12.2012 00:20
[#] Ответ на комментарий от andy128k 26.12.2012 00:20
andy128k:
Не хватает чего-нибудь эдаково. "Let over lambda" самое то.

"Как с помощью cons, car и такой-то матери сделать cdr", например. :)
Начал проект по переводу "Let Over Lambda". Кто хочет помочь с переводом - присоединяйтесь.
Charlz_Klug - 18.05.2013 11:13
[#] Ответ на комментарий от Charlz_Klug 18.05.2013 11:13
Название должно оставаться не переводимым, т.к.:
  1.  Там 2 слова нельзя перевести (let и lambda)
  2. LOL должен сохраниться
;)

vseloved - 19.05.2013 02:35
[#] Ответ на комментарий от vseloved 19.05.2013 02:35
vseloved:
>Название должно оставаться не переводимым, т.к.:
  1.  Там 2 слова нельзя перевести (let и lambda)
  2. LOL должен сохраниться
Исправил.
Charlz_Klug - 19.05.2013 06:28
[#] Ответ на комментарий от Charlz_Klug 19.05.2013 06:28
"Lambda объятая Let'ом"
andy128k - 19.05.2013 07:33
[#] Ответ на комментарий от andy128k 19.05.2013 07:33
LOL! Супер!

Или вот:
  • Лямбда охваченная Летом
  • Лямбда окруженная Летом
  • Лет обволакивает Лямбду
  • Лет овладевает Лямбдой
vseloved - 19.05.2013 13:32
[#] Ответ на комментарий от vseloved 19.05.2013 13:32
Пока оставлю английский оригинал.
Charlz_Klug - 19.05.2013 22:41
[#] Ответ на комментарий от Charlz_Klug 19.05.2013 22:41
Перевёл первую главу. Читать здесь: http://ru.wikibooks.org/wiki/Let_Over_Lambda
Charlz_Klug - 06.06.2013 01:19
[#] Ответ на комментарий от Charlz_Klug 06.06.2013 01:19
В "Let Over Lambda" есть такой пример:
* (function '(lambda (x) (+ 1 x)))

#<Interpreted Function>
У меня он не работает:
CL-USER> (function '(lambda (x) (+ 1 x)))
; in: FUNCTION '(LAMBDA (X) (+ 1 X))
;     #''(LAMBDA (X) (+ 1 X))
;
; caught ERROR:
;   '(LAMBDA (X) (+ 1 X)) is not a legal function name.
;
; compilation unit finished
;   caught 1 ERROR condition
; Evaluation aborted on #<SB-INT:COMPILED-PROGRAM-ERROR {C6116B1}>.
CL-USER>
Далее приводится аналогичный код, который у меня работает:
* #'(lambda (x) (+ 1 x))

#<Interpreted Function>

CL-USER> #'(lambda (x) (+ 1 x))
#<FUNCTION (LAMBDA (X)) {C8B598D}>

По моему тут должно быть так:
CL-USER> (function (lambda (x) (+ 1 x)))
#<FUNCTION (LAMBDA (X)) {CB367D5}>
CL-USER>
Поправьте меня если я ошибаюсь. Кстати, как в этом форуме сменить пароль? Искал, но ничего не нашёл.
Charlz_Klug - 22.06.2013 13:35
[#] Ответ на комментарий от Charlz_Klug 22.06.2013 13:35
>  Кстати, как в этом форуме сменить пароль? Искал, но ничего не нашёл.

В форме входа притвориться что забыл, получить письмо и указать новый пароль.
archimag - 22.06.2013 13:49
[#] Ответ на комментарий от archimag 22.06.2013 13:49
> В форме входа притвориться что забыл, получить письмо и указать новый пароль.
Ничего себе расклад! А по человечески сделать профиль не планируете?
Charlz_Klug - 23.06.2013 00:20
[#] Ответ на комментарий от Charlz_Klug 23.06.2013 00:20
> А по человечески сделать профиль не планируете?

Может быть когда нибудь, когда будет время и желание.
archimag - 23.06.2013 03:55
[#]
Перевёл книгу "Programming Clojure Second Edition" на русский язык. Читать здесь.
Charlz_Klug - 10.07.2013 02:05
[#] Ответ на комментарий от Charlz_Klug 22.06.2013 13:35
Вроде да, так.
den73 - 11.07.2013 02:31
[#] Ответ на комментарий от Charlz_Klug 06.06.2013 01:19
Перевёл вторую главу "Замыкания"из книги "Let Over Lambda".
Charlz_Klug - 14.07.2013 08:51
[#] Ответ на комментарий от Charlz_Klug 14.07.2013 08:51
Ссылка была не верная. Вот правильная ссылка.
Charlz_Klug - 14.07.2013 08:52
[#] Ответ на комментарий от Charlz_Klug 14.07.2013 08:52
Опять ошибся. Archimag, запилите, пожалуйста предпросмотр сообщения или редактирование сообщений. Ссылка.
Charlz_Klug - 14.07.2013 08:55
[#]
Описание проблемы: запускаю emacs, в emacs'е запускаю slime, открываю файл со следующим содержимым:


(defun mkstr (&rest args)
  (with-output-to-string (s)
    (dolist (a args) (princ a s))
)
)

 
(defun symb (&rest args)
  (values (intern (apply #'mkstr args)))
)


(defun flatten (x)
  (labels ((rec (x acc)
             (cond ((null x) acc)
                   ((atom x) (cons x acc))
                   (t (rec
                        (car x)
                        (rec (cdr x) acc)
)
)
)
)
)

    (rec x nil)
)
)


(defun g!-symbol-p (s)
  (and (symbolp s)
       (> (length (symbol-name s)) 2)
       (string= (symbol-name s)
                "G!"
                :start1 0
                :end1 2
)
)
)


(defmacro defmacro/g! (name args &rest body)
  (let ((syms (remove-duplicates
               (remove-if-not #'g!-symbol-p
                              (flatten body)
)
)
)
)

    `(defmacro ,name ,args
       (let ,(mapcar
              (lambda (s)
                `(,s (gensym ,(subseq
                               (symbol-name s)
                               2
)
)
)
)

              syms
)

         ,@body
)
)
)
)



(defmacro defmacro! (name args &rest body)
  (let* ((os (remove-if-not #'o!-symbol-p args))
         (gs (mapcar #'o!-symbol-to-g!-symbol os))
)

    `(defmacro/g! ,name ,args
       `(let ,(mapcar #'list (list ,@gs) (list ,@os))
          ,(progn ,@body)
)
)
)
)


(defun o!-symbol-to-g!-symbol (s)
  (symb "G!"
        (subseq (symbol-name s) 2)
)
)



(defun o!-symbol-p (s)
  (and (symbolp s)
       (> (length (symbol-name s)) 2)
       (string= (symbol-name s)
                "O!"
                :start1 0
                :end1 2
)
)
)


(defmacro! my-square (o!x)
  `(* ,g!x ,g!x)
)
Нажимаю [Ctrl]+[c], [Ctrl]+[k] и получаю ругательство:

1 compiler notes:

1.lisp:61:1:
  error: 
    (during macroexpansion of (DEFMACRO! MY-SQUARE ...))
    The function COMMON-LISP-USER::O!-SYMBOL-P is undefined.

Compilation failed.
Причём, если убрать последнее определение
(defmacro! my-square (o!x)
  `(* ,g!x ,g!x)
)
то всё превосходно компилируется. Как сделать так, чтобы компилировалось по первому способу без ругательств?
Charlz_Klug - 22.08.2013 12:13
[#] Ответ на комментарий от Charlz_Klug 22.08.2013 12:13
Обернуть все вспомогательные функции в eval-when:


(eval-when (:compile-toplevel :load-toplevel :execute)

  (defun mkstr (&rest args)
    (with-output-to-string (s)
      (dolist (a args) (princ a s))
)
)

  
  (defun symb (&rest args)
    (values (intern (apply #'mkstr args)))
)


  (defun flatten (x)
    (labels ((rec (x acc)
               (cond ((null x) acc)
                     ((atom x) (cons x acc))
                     (t (rec
                         (car x)
                         (rec (cdr x) acc)
)
)
)
)
)

      (rec x nil)
)
)


  (defun g!-symbol-p (s)
    (and (symbolp s)
         (> (length (symbol-name s)) 2)
         (string= (symbol-name s)
                  "G!"
                  :start1 0
                  :end1 2
)
)
)


  (defmacro defmacro/g! (name args &rest body)
    (let ((syms (remove-duplicates
                 (remove-if-not #'g!-symbol-p
                                (flatten body)
)
)
)
)

      `(defmacro ,name ,args
         (let ,(mapcar
                (lambda (s)
                  `(,s (gensym ,(subseq
                                 (symbol-name s)
                                 2
)
)
)
)

                syms
)

           ,@body
)
)
)
)


  (defun o!-symbol-to-g!-symbol (s)
    (symb "G!"
          (subseq (symbol-name s) 2)
)
)


  (defun o!-symbol-p (s)
    (and (symbolp s)
         (> (length (symbol-name s)) 2)
         (string= (symbol-name s)
                  "O!"
                  :start1 0
                  :end1 2
)
)
)
)


(defmacro defmacro! (name args &rest body)
  (let* ((os (remove-if-not #'o!-symbol-p args))
         (gs (mapcar #'o!-symbol-to-g!-symbol os))
)

    `(defmacro/g! ,name ,args
       `(let ,(mapcar #'list (list ,@gs) (list ,@os))
          ,(progn ,@body)
)
)
)
)


(defmacro! my-square (o!x)
  `(* ,g!x ,g!x)
)

Menschenkindlein - 22.08.2013 12:39
[#] Ответ на комментарий от Menschenkindlein 22.08.2013 12:39
Дело в том, что при компиляции эти функции еще не загружены, а уже нужны. EVAL-WHEN позволяет их загрузить вовремя.
Menschenkindlein - 22.08.2013 12:40
[#] Ответ на комментарий от Menschenkindlein 22.08.2013 12:40
Благодарю за ответ.
Перевёл третью главу "Let Over Lambda".
Charlz_Klug - 08.09.2013 01:41
[#] Ответ на комментарий от Charlz_Klug 08.09.2013 01:41
Перевёл четвёртую главу "Let Over Lambda". Версию pdf файла на текущий момент можно скачать здесь.
Charlz_Klug - 08.12.2013 07:12
[#] Ответ на комментарий от Charlz_Klug 08.12.2013 07:12
а вот чукча не читатель, а писатель.
http://ecovillage.narod.ru/lisp/lisp-tutorial.htm
можно ругать и предлагать механизм
den73 - 08.12.2013 13:31
[#] Ответ на комментарий от den73 08.12.2013 13:31
http://ecovillage.narod.ru/lisp/lisp-tutorial.htm
можно ругать и предлагать механизм расширения силами коллективного разума.
den73 - 08.12.2013 13:33
[#] Ответ на комментарий от den73 08.12.2013 13:33
> http://ecovillage.narod.ru/lisp/lisp-tutorial.htm
> можно ругать и предлагать механизм расширения силами коллективного разума.


Можно на wikibooks выкладывать. Кому будет интересно вполне могут дописывать.
Charlz_Klug - 12.12.2013 10:05
[#] Ответ на комментарий от Charlz_Klug 12.12.2013 10:05
Перевёл пятую главу из книги "Let Over Lambda". Готовый билд в pdf находится здесь.
Charlz_Klug - 23.02.2014 05:35
[#] Ответ на комментарий от Charlz_Klug 23.02.2014 05:35
Перевод "Programming Clojure" на Викикниге удалили. Поэтому залил сюда.
Charlz_Klug - 23.02.2014 05:48
[#] Ответ на комментарий от Charlz_Klug 23.02.2014 05:48
Готов перевод шестой главы "Анафорические Макросы". Сборку в pdf можно скачать здесь. Начал перевод книги "Concepts, techniques and models of computer programming". Желающие помочь могут присоединиться.
Charlz_Klug - 06.04.2014 07:44
[#] Ответ на комментарий от Charlz_Klug 06.04.2014 07:44
Столкнулся со сложностью в переводе. Есть предложение:

The machine code should be fairly short, but this is because much of the complexity is hidden from view with the invocation of a pre-compiled function—one with enough smarts to provide all the fancy lisp number features like type contagion, rational simplification, etc.

Что такое "type contagion"? Временно перевёл так:

Машинный код должен быть очень коротким, а всё потому, что большинство сложных элементов будут скрыты вызовом предварительно скомпилированной функции - достаточно умной, чтобы предоставить такие особенности лиспа, как наследование типа (type contagion), рациональное упрощение (rational simplification) и т.д..
Charlz_Klug - 25.04.2014 03:04
[#] Ответ на комментарий от Charlz_Klug 25.04.2014 03:04
Я так понимаю, что речь идет не просто об "особенностях Лиспа", а о его возможностях в области обработки чисел. В этом контексте "type contagion" – это, наверно, "выведение типа результата", а "rational simplification" –  "упрощение рациональных чисел" (чисел, представленных в виде дробе целых).
ilowry - 25.04.2014 03:24
[#] Ответ на комментарий от ilowry 25.04.2014 03:24
Да, в данном контексте речь идёт именно о работе лиспа с числовыми значениями. Ваш вариант выглядит лучше чем мой. Спасибо за ответ.
Charlz_Klug - 25.04.2014 03:47
[#] Ответ на комментарий от Charlz_Klug 25.04.2014 03:04
Поискал перевод слова и выражения.

Само слово, преимущественно, используется в контексте «распространение инфекции». Имеется ввиду процесс заражения, передача инфекции от одного пациента к другому.

В компиляторах используется в контексте явного/неявного приведения типа в функциях.
Весьма вменяемый пример я нашел здесь:

http://www.cs.uiuc.edu/~mfleck/envision/compiler/contagion.html

«Выведение типа результата» — неплохой перевод. Возможно, в контексте может быть более уместным «приведение типа результата», поскольку речь идет от замене типа входных данных функции на тип выходных данных. Своеобразное «заражение».
Впрочем, «выведение типа» может конфликтовать с «выводом типов», если он в книге описывается и используется.
dmitrys99 - 27.04.2014 10:04
[#] Ответ на комментарий от dmitrys99 27.04.2014 10:04
В LoL упоминается и вывод типов. Так что конфликт между "выведением типа результата" и "выводом типов" имеет место. Наверное "приведение типа результата" будет правильней. Пока вопрос открыт, если у кого какие замечания, пожалуйста, пишите.
Charlz_Klug - 28.04.2014 03:27
[#] Ответ на комментарий от Charlz_Klug 25.04.2014 03:04
type contagion - автоматическое приведение числовых типов
rational simplification - сокращение дробей
orivej - 28.04.2014 06:36
[#] Ответ на комментарий от orivej 28.04.2014 06:36
Спасибо за ответ!
Charlz_Klug - 29.04.2014 07:17
[#]
Сори, техническое сообщение.
archimag - 29.04.2014 07:26
[#] Ответ на комментарий от archimag 29.04.2014 07:26
Переводы книг "Let Over Lambda" и "Concepts, techniques and models of computer programming" временно приостановлены. Причина: переезд на ПМЖ из Узбекистана в РФ и сопутствующие этому проблемы.
Charlz_Klug - 23.05.2014 02:48
[#] Ответ на комментарий от Charlz_Klug 23.05.2014 02:48
Charlz_Klug, как с Вами можно связаться?
xelgun - 23.03.2015 03:27
[#] Ответ на комментарий от Charlz_Klug 23.05.2014 02:48
не успел скачать LoL. Перевод еще доступен?
dima0905 - 23.03.2015 16:27
[#] Ответ на комментарий от xelgun 23.03.2015 03:27
Можно здесь, а можно и по почте: charlz_klug[at]мыло.ру. Что вас интересует?
Charlz_Klug - 26.03.2015 08:31
[#] Ответ на комментарий от dima0905 23.03.2015 16:27
Перевод доступен в TeX виде. В PDF - нет. Когда закончу вёрстку второй главы CTMCP - перейду к вёрстке седьмой главы LoL. Примерно к началу июня думаю выложить сборку LoL с седьмой главой. Если торопитесь прочитать - то можете собрать сами то, что есть на данный момент. Репозиторий проекта: https://code.google.com/p/rulol/ .
Charlz_Klug - 26.03.2015 08:39
[#] Ответ на комментарий от Charlz_Klug 26.03.2015 08:39
> Репозиторий проекта: https://code.google.com/p/rulol/ .


> git clone https://code.google.com/p/rulol/
Cloning into 'rulol'...
remote: Counting objects: 277, done.
Receiving objects: 100% (277/277), 3.25 MiB | 479.00 KiB/s, done.
Resolving deltas: 100% (157/157), done.
Checking connectivity... done

> cd rulol/

> ls -la
total 4
-rw-r--r-- 1 name users 84 Mar 26 15:21 changelog

> cat changelog
2013.11.03 14:52
 - зарегистрирован проект в code.google.com.

Прикольно :)
anaumov - 26.03.2015 10:32
[#] Ответ на комментарий от anaumov 26.03.2015 10:32
В "master" ничего прикольного нет, всё прикольное - в "work".
Charlz_Klug - 26.03.2015 14:11
[#] Ответ на комментарий от Charlz_Klug 26.03.2015 14:11
> В "master" ничего прикольного нет, всё прикольное - в "work"

Почему Вы создали проект на code.google, а не в github?
Номера страниц в верху?

anaumov - 26.03.2015 17:05
[#] Ответ на комментарий от Charlz_Klug 18.05.2013 11:13
> Начал проект по переводу "Let Over Lambda". Кто хочет помочь с переводом - присоединяйтесь.

Откуда Вы ее переводите? Я имею в виду source. Вы купили книгу?
anaumov - 26.03.2015 17:17
Страницы: 1234
@2009-2013 lisper.ru