Я подобрал книгу LISP в продаже гаража на днях и просто задавался вопросом, стоит ли потратить некоторое время.
Является ли обучение LISP полезным во все эти дни?
Ответ 1
Да. Я буду придерживаться Common Lisp, здесь, хотя Scheme также является превосходным языком, который может порекомендовать его.
В Common Lisp у вас довольно большой язык с несколькими парадигмами, который предоставляет некоторые вещи, которые либо не существуют широко за пределами семейства языков Lisp, либо ограничены CL и еще более неясными/нишевыми языками.
Первая особенность, которую вы можете получить так или иначе от CL, Scheme и довольно многих других диалектов, - настоящая макросистема.
Я говорю "реальный", потому что система гораздо более полная, гибкая и надежная, чем, скажем, макросы препроцессора C. Крайне сложно получить макросы CPP, чтобы делать простые вещи (например, заменять значения двух переменных или создавать конструкцию foreach
), но они тривиальны с макросами Lisp. Это оказывается очень мощным инструментом для введения новых абстракций и отказа от "шаблонного" кода.
Вторая функция, которая фактически ограничена Common Lisp, - CLOS, Common Lisp Object System. Несмотря на название, это не обычная OO-система, подобная Java, причем методы являются частью определения класса. Вместо этого он обеспечивает полиморфизм через "общие функции", к которым привязаны методы, и по умолчанию позволяет выполнять множественную отправку.
Я очень предпочитаю CLOS более привычный подход к ориентации объектов, поскольку он делает несколько "шаблонов" (например, шаблон Visitor) совершенно ненужным и потому что расширение существующих общих функций настолько просто; другие ненавидят его, потому что он требует чрезвычайно кавалерийного подхода к инкапсуляции и потому, что расширение общих функций становится легко слишком. В любом случае, CLOS достаточно разный, и я думаю, что он стоит изучать только для различных перспектив, которые он предоставляет.
Третья функция, доступная вне Lisp, но все же фантастическая, если вы ее никогда не испытывали, - это динамическое интерактивное программирование. CL-отладчики, как правило, являются чрезвычайно мощными инструментами, а CL обеспечивает динамическое определение и переопределение функций, классов и методов, которые резко улучшают одну способность исследовать проблему, тестировать решения этой проблемы и ее подзадач и, наконец, программа, которая работает правильно и эффективно.
Наконец, для множества классов проблем Lisp - большой практический язык. Он обеспечивает хорошую производительность (обычно не так быстро, как C, но значительно быстрее, чем большинство "языков сценариев" ), безопасность, автоматическое управление памятью, достойная "стандартная библиотека" функций и огромные возможности для легкого расширения.
Ответ 2
В настоящее время стоит учиться для целей "расширения разума", но не так популярен для создания приложений в наши дни.
Однако он мощный и зрелый, и там есть быстрые и бесплатные компиляторы. Поэтому нет причин не выбирать его для программы, если хотите.
Способ, которым Lisp относится к структурам данных и структурам программ, предлагает потрясающую силу, которую стоит понять.
Его история увлекательна, и она сформировала мир информатики.
Обязательно проверьте Ableson и Sussman Структура и интерпретация компьютерных программ в MIT OpenCourseware
Ответ 3
Зависит от книги. Какая книга?
Общий Lisp стоит изучать сегодня, потому что это один из немногих языков, который в значительной степени "делает все". Если есть какая-то мейнстримовая или неясная идиома или техника программирования, то шансы Common Lisp уже есть в той или иной форме. О единственном, что не хватает CL, является продолжение (многие утверждают, что это им не нужно, но это не полезно, если вы хотите их изучить).
Любой, кто потратит какое-либо серьезное время на запись в Common Lisp, будет изменен каким-то образом, как правило, к лучшему, IMHO.
Даже если вы не можете перенести все концепции Lispy, которые вы изучаете и используете в других средах, знание их и то, как они работают, по-прежнему полезно.
Ответ 4
Хорошие программисты проявляют себя как можно больше различных парадигм программирования - не столько языков программирования, сколько они могут.
Семейство LISP (есть несколько вариантов) очень полезно узнать. Ваша цель должна заключаться в том, чтобы ваша голова обмакнула функциональное программирование и исчисление лямбда - парадигма, на которой основана LISP. Сфокусируйтесь меньше на том, чтобы стать программистом "ace" LISP (это может занять годы).
Если вы обнаружите, что функциональное программирование "переворачивает ваш переключатель", попробуйте также взглянуть на PROLOG - здесь парадигма основана на оценке роговых клаусов (логика предикатов).
Возможно, я провел последние 20 лет, зарабатывая себе на жизнь как программист COBOL (OMG - они все еще есть!), но я думаю, что я лучший программист из-за времени, потраченного на изучение того, что LISP, и число других языков программирования действительно были о.
Возьми взрыв...
Ответ 5
Здесь стоит поговорить о технической поддержке Google о компании, которая в настоящее время производит большое и сложное программное обеспечение для авиационной отрасли в Common Lisp:
Lisp для высокопроизводительной обработки транзакций (Видео сейчас недоступно. Вот заметка Зака Бина.)
В этом видео упоминаются и другие темы, в том числе Clojure, новый вариант Lisp для JVM (в настоящее время также ведется некоторая работа по разработке Clojure для CLR, но это не так уж и далеко), который стоит проверить способ решения проблем параллелизма. Смотрите сайт Clojure по адресу:
и, в первую очередь, сначала посмотрите ссылку в правом верхнем углу этой страницы на несколько великолепных скринкастов с обзорами проблем параллелизма и функциями Clojure.
Если вы заинтересовались Lispом, и книга, которую вы нашли, не так уж хороша (у меня есть старая, которая для меня мало что сделала), книга Пола Грэма "О Lispе" доступна бесплатно по адресу http://www.paulgraham. com/onlisp.html и это очень хорошо. Общая идея Lisp одинакова для Common Lisp, Scheme, Emacs Lisp или Clojure, но специфика будет другой - так что имейте это в виду, читая книгу Грэма, которая в основном посвящена Common Lisp (с некоторыми упоминаниями о специфике Scheme). О Lispе, пожалуй, не лучшая книга для начинающих, но стоит пройтись по ней и просто пролистать подробности, которые вы еще не готовы подробно изучить, чтобы увидеть, что там есть, особенно в отношении макросов, которые действительно исследует На Lispе.
Ответ 6
См. этот вопрос, и особенно третий ответ, тот, который объясняет, что Lisp хорош для решения сложных проблем, проблем, которые трудно разложить в более управляемые модули, если вы попытаетесь решить их на другом языке. Другими словами, если вы заинтересованы в поиске путей решения сложных проблем, связанных с использованием естественной обработки языка или агрегации знаний... тогда да, Lisp может быть вам полезен.
Ответ 7
Изучите lisp, чтобы узнать о макросах, и этот код - данные, и узнайте, что вы можете достичь просветления без самобичевания С++.
Изучите общий lisp, чтобы узнать о макросах читателя и макросах компилятора. Я не знаю другого языка, который у них есть.
Узнать схему продолжений.
Изучите Clojure, потому что он заставит Java устаревать: -)
Ответ 8
Одно из преимуществ Lisp заключается в том, что вы выражаете признательность за префикс и удивляетесь, почему все остальные в мире не делают это нам (например, с Latex
или vim
)
+ 1 2 3 4 5 6 7 8 9
много легче кодировать/редактировать/вставлять, чем
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
Ответ 9
It (Common Lisp) по-прежнему широко используется учеными, работающими в искусственном интеллекте. Scheme - это Lisp -подобный язык, используемый многими (большинством?) отделов CS. Лично я думаю, что изучение Lisp стоит того, использует ли он его. Это классический язык, который мы многому научились со временем.
Ответ 10
Как уже упоминалось, Lisp больше не используется для общего программирования, и определенно (IMO) имеет ряд серьезных проблем для написания реальных систем, но, конечно, другие не согласны (например, большая часть программного обеспечения ITA написано в Lisp, и они делают сумасшедший банк).
Даже если вы никогда не пишете "настоящую" программу в Lisp, это абсолютно необходимо изучить. Существует много методов программирования, первоначально разработанных в Lisp, которые, зная их, помогут вам лучше писать код на Python, Perl, Ruby, ML, Haskell и даже на С++. Например, проверьте Более высокий порядок Perl", в котором показано, как делать всевозможные потрясающие трюки в Perl; процитировать введение "Вместо того, чтобы рассказывать вам, насколько замечателен Lisp, я расскажу вам, как замечателен Perl, и в конце вам не нужно будет знать ни одного Lisp, но вы узнаете намного больше о Perl. [...] Тогда вы можете прекратить писать C-программы на Perl. Я думаю, вы обнаружите, что это приятное изменение. Perl намного лучше в Perl, чем в медленной версии C.
И есть несколько отличных книг, которые используют Lisp, и их будет легче понять, если вы знаете язык - SICP, Norvig Парадигмы программирования искусственного интеллекта и The Reasoned Schemer все приходят на ум, как следует читать.
Ответ 11
Некоторые люди здесь рекомендуют Clojure. Хотя я бы сказал, что Lisp в целом хорош, я бы предостерег от Clojure, по крайней мере, для начинающих. Использование Clojure не вызывает трудностей, просто в том, что Clojure безвозмездно несовместим с Common Lisp и Scheme. Если вы хотите интегрировать JVM, используйте Armed Bear Common Lisp: https://common-lisp.net/project/armedbear/, хотя для общего использования я бы рекомендовал Steel Bank Common Lisp: http://www.sbcl.org/
Ответ 12
Это похоже на вопрос, стоит ли "изучать C в эти дни веб-программирования?". Только вы можете решить, стоит ли это. Что вы должны спросить себя: что я пытаюсь достичь, прочитав книгу?
Изучение новых языков иногда не полезно в практических практических вещах (возможно, вы не собираетесь использовать LISP когда-либо в своей жизни), но в долгосрочной перспективе это будет полезен из-за знаний, приобретенных с помощью различных парадигм, с которыми вы не слишком знакомы, - и вы могли бы использовать некоторые из ваших знаний в том, что вы уже используете сегодня.
Ответ 13
Обучение LISP - хороший способ эффективно изучить функциональное программирование и часто используется в качестве вступительного языка для студентов-магистрантов. Многие люди считают, что Структура и интерпретация компьютерных программ, в которой используется диалоги Scheme Lisp, это книга, которая должна быть на каждой полке программистов.
Пол Грэм был большим сторонником Lisp, а в своей книге Хакеры и художники, он описывает, как он использовал силу LISP, чтобы доминировать в конкурсе при создании ViaWeb для магазинов Yahoo.
В другом месте я видел диалекты LISP, которые занимают видное место в аэрокосмической отрасли, в качестве инструментов для создания сценариев интеграции, таких как Comet, и AML. LISP всегда будет привязан к ранним экспериментам по ИИ в 1950-х годах.
Ответ 14
Прошло некоторое время после университета, но после того, как я занял курс третьего курса CS, который требовал обучения Lisp и написания программ Lisp, рекурсивно было рекурсивно писать и думать. Не то, чтобы у меня были проблемы с рекурсией перед курсом, но потом, это была вторая натура. Я также использовал CLOS в курсе (Университет Торонто), но это было так давно, я едва помню, что я сделал.