Комментарии 15
все хочу изучить Lisp, все думаю когда… но иногда пугает некоторая неопределенность. Ведь между Си подобными языками и Lisp пропость, длинною в вечность, словно две разные вселенные, где зная одну, не сразу можно понять другую, а зная вторую, то первая окажется как открытая книга
Не такая уж и большая пропасть между этими вселенными, на самом деле.
Во многих случаях можно сравнить вызов (func) в Lisp с вызовом func() в Си. Количество скобок и семантика совпадают :)
Так что все не так страшно.
Во многих случаях можно сравнить вызов (func) в Lisp с вызовом func() в Си. Количество скобок и семантика совпадают :)
Так что все не так страшно.
Пропадает все желание учить лисп после:
Пакетом в Common Lisp называется полноправный элемент языка, семантика которого четко определена стандартом. Более того, из всех обсуждаемых на этой странице терминов, этот — единственный, имеющий (в контексте Common Lisp) однозначное определение. Пакеты — это, строго говоря, контейнеры для символов. Можно сказать, что они нужны для помощи в организации отдельных пространств имен в ваших программах.
В тексте присутствует оперирование терминами, с которыми не каждый читатель знаком. ( а статья похоже для новичков в Lisp).
Совершенно не понятно что есть элемент языка, символ, контейнер. А именно этими терминами автор пытается объяснить смысл понятия пакет.
Я понимаю, что это не статья «Lisp for dummies», но с тем же успехом можно объяснять блондинке, что ДВС это один из главных агрегатов автомобиля, превращающий энергию от сгорания топлива в крутящий момент, и передающий этот крутящий момент в трансмиссию.
Пакетом в Common Lisp называется полноправный элемент языка, семантика которого четко определена стандартом. Более того, из всех обсуждаемых на этой странице терминов, этот — единственный, имеющий (в контексте Common Lisp) однозначное определение. Пакеты — это, строго говоря, контейнеры для символов. Можно сказать, что они нужны для помощи в организации отдельных пространств имен в ваших программах.
В тексте присутствует оперирование терминами, с которыми не каждый читатель знаком. ( а статья похоже для новичков в Lisp).
Совершенно не понятно что есть элемент языка, символ, контейнер. А именно этими терминами автор пытается объяснить смысл понятия пакет.
Я понимаю, что это не статья «Lisp for dummies», но с тем же успехом можно объяснять блондинке, что ДВС это один из главных агрегатов автомобиля, превращающий энергию от сгорания топлива в крутящий момент, и передающий этот крутящий момент в трансмиссию.
Package — это хэш-таблица от имён символов к самим символам. Вроде namespace'ов в других языках.
Symbol — это объект, который имеет имя, может лежать (или не лежать — тогда это неинтернированный символ) в пакете и называть функции, переменные, типы и т.д. Вроде идентификаторов из других языков, только это всё-же объект, а не просто имя.
И символы и пакеты — сущности первого класса. Их можно изменять как объекты с полями и складывать в переменные.
Symbol — это объект, который имеет имя, может лежать (или не лежать — тогда это неинтернированный символ) в пакете и называть функции, переменные, типы и т.д. Вроде идентификаторов из других языков, только это всё-же объект, а не просто имя.
И символы и пакеты — сущности первого класса. Их можно изменять как объекты с полями и складывать в переменные.
Вот, например из SBCL:
CL-USER> (describe 'list)
COMMON-LISP:LIST
[symbol]
LIST names a compiled function:
Lambda-list: (&REST ARGS)
Declared type: (FUNCTION * (VALUES LIST &OPTIONAL))
Derived type: (FUNCTION (&REST T) (VALUES LIST &OPTIONAL))
Documentation:
Return constructs and returns a list of its arguments.
Known attributes: flushable, unsafely-flushable, movable
Source file: SYS:SRC;CODE;LIST.LISP
LIST names the built-in-class #:
Class precedence-list: LIST, SEQUENCE, T
Direct superclasses: SEQUENCE
Direct subclasses: CONS, NULL
No direct slots.
LIST names a primitive type-specifier:
(undocumented)
Видим, что символ LIST из пакета COMMON-LISP называет функцию и встроенный тип.
CL-USER> (describe 'list)
COMMON-LISP:LIST
[symbol]
LIST names a compiled function:
Lambda-list: (&REST ARGS)
Declared type: (FUNCTION * (VALUES LIST &OPTIONAL))
Derived type: (FUNCTION (&REST T) (VALUES LIST &OPTIONAL))
Documentation:
Return constructs and returns a list of its arguments.
Known attributes: flushable, unsafely-flushable, movable
Source file: SYS:SRC;CODE;LIST.LISP
LIST names the built-in-class #:
Class precedence-list: LIST, SEQUENCE, T
Direct superclasses: SEQUENCE
Direct subclasses: CONS, NULL
No direct slots.
LIST names a primitive type-specifier:
(undocumented)
Видим, что символ LIST из пакета COMMON-LISP называет функцию и встроенный тип.
Желающим изучить Common Lisp советую почитать Practical Common Lisp (русский перевод). Книга даёт неплохой начальный пинок в правильном направлении, но требует кое-каких программерских знаний.
Хотя лично я больше поклонник более цельного и стандартизированного Lisp-языка Scheme, а точнее — его богатейшего диалекта Racket (интервью с одним из разработчиков — здесь).
Хотя лично я больше поклонник более цельного и стандартизированного Lisp-языка Scheme, а точнее — его богатейшего диалекта Racket (интервью с одним из разработчиков — здесь).
Scheme более цельный и стандартизированный? Racket — да, Scheme вообще — скорее нет.
Согласен.
Скажите, чем отличаются Scheme и Racket? Что есть Racket вообще?
Racket — это, по сути, Scheme с небольшим количеством расширений на уровне языка. Но Racket более богат функционально: там больше удобных макросов (для циклов, например), солидный набор библиотек. Есть приличный редактор DrRacket с отладчиком (хотя Emacs + Quack + Geiser всё равно круче). Там есть ещё специальные учебные языки, в которых убраны все «лишние» на данном этапе обучения возможности. В общем, Racket пока что лидирует среди реализаций Scheme по универсальности и функционалу.
Думаю, что упоминание вместе блондинки и ДВС несколько некорректно для этой статьи.
Скорее можно сказать, что здесь идет пояснение для учеников автомобильного техникума, как именно работает ДВС и как энергия преобразуется в движение.
Т.е. для тех, кто уже знает о существовании comp.lang.lisp и уже что-то попробовал сделать сам.
Скорее можно сказать, что здесь идет пояснение для учеников автомобильного техникума, как именно работает ДВС и как энергия преобразуется в движение.
Т.е. для тех, кто уже знает о существовании comp.lang.lisp и уже что-то попробовал сделать сам.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пакеты, системы, модули, библиотеки — КАКОГО?