Полезно ли изучать LISP во все эти дни? [закрыто]

Я взял книгу LISP на распродаже в гараже на днях, и мне было просто интересно, стоит ли тратить на это время.

27 lisp
23.10.2009 17:02:01
Лучшее, что я когда-либо делал, было наткнуться на LISP. Это открыло мне глаза в стиле «езды на велосипеде», и его влияние присутствует во всем, что я запрограммировал с тех пор. Приятного чтения!
deau 23.10.2009 19:50:13
Здесь можно найти много ответов: programmers.stackexchange.com/q/55284/15028
TCSGrad 15.04.2013 03:50:15
14 ОТВЕТОВ

Зависит от книги. Которая Книга?

Common Lisp стоит изучать сегодня, потому что это один из немногих языков, который в значительной степени «делает все». Если есть какая-то основная или неясная идиома или методика программирования, шансы у Common Lisp уже есть в той или иной форме. Единственное, чего не хватает CL - это продолжения (многие утверждают, что они им не нужны, но это бесполезно, если вы хотите их изучить).

Любой, кто потратит какое-то серьезное время на написание на Common Lisp, выйдет измененным, как правило, к лучшему, ИМХО.

Даже если вы не можете перенести все концепции Lispy, которые вы изучаете и используете, в другие среды, знание о них и о том, как они работают, все еще полезно.

12
23.10.2009 17:13:25
Ну, CL имеет разграничены продолжения. Есть даже веб-фреймворки, построенные вокруг них.
dmitry_vk 23.10.2009 17:36:16

Стоит учиться в целях «расширения сознания», но в наши дни не так популярны для создания приложений.

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

То, как Lisp одинаково обрабатывает структуры данных и программные структуры, предлагает удивительную мощь, которую стоит понять.

Его история увлекательна, и она сформировала мир компьютерной науки.

Обязательно ознакомьтесь со структурой и интерпретацией Ableson и Sussman компьютерных программ в MIT OpenCourseware

Clojure: Лисп на виртуальных машинах .NET и Java

GNU CLISP.

CMU Common Lisp

15
23.10.2009 17:23:37
CMUCL больше не обновляется. Я бы придерживался SBCL, если нет причин использовать более старый.
Ken 23.10.2009 17:29:19
Это не совсем так. SBCL более активен, чем CMUCL, но CMUCL активно поддерживается. Всего три недели назад с CMUCL 20a вышел новый основной релиз. CMUCL также ежемесячно выпускает снимки.
Rainer Joswig 23.10.2009 22:46:51
В чем именно разница между «CMUCL не обновляется столько же» и «SBCL более активен»? :-) Вы говорите, (<ab), я говорю (> ba) ...
Ken 24.11.2009 21:36:52

Посмотрите этот вопрос, и особенно третий ответ, который объясняет, что Lisp хорош для решения сложных проблем, тех проблем, которые трудно разложить на более управляемые модули, если вы попытаетесь решить их на другом языке. Другими словами, если вы заинтересованы в поиске путей решения запутанных проблем, которые включают, скажем, обработку естественного языка или агрегацию знаний ... тогда, да, Lisp может быть просто полезен для вас.

4
23.05.2017 10:29:50

Он ( Common Lisp ) по-прежнему активно используется учеными, работающими в области искусственного интеллекта. Схема - это Лисп-подобный язык, используемый многими (большинством?) Отделами CS. Лично я думаю, что изучение Lisp стоит того, чтобы использовать его. Это классический язык, из которого мы многому научились.

2
23.10.2009 17:15:36
Можете ли вы привести несколько примеров для Common Lisp? Единственные, кого я знаю, это те, кто работает с Кевином Найтом в Институте информационных технологий США.
Nathan Shively-Sanders 23.10.2009 17:22:16
Гордон Новак в UT использует Лисп во всех, кроме двух классов начального уровня, которые он преподает (для которых в учебной программе указана Java): cs.utexas.edu/~novak
Sam Harwell 23.10.2009 17:32:26

Это все равно что задавать вопрос, «стоит ли изучать C в эти дни веб-программирования?». Только вы можете решить, стоит ли это. Вы должны спросить себя: чего я пытаюсь достичь, читая книгу?

Изучение новых языков иногда бесполезно в практическом смысле (возможно, вы никогда не будете использовать LISP в своей жизни), но в долгосрочной перспективе это будет полезно из-за знаний, приобретенных различными парадигмами Вы не слишком знакомы с - и вы могли бы использовать некоторые из вас, изученные в том, что вы уже используете сегодня.

1
23.10.2009 17:15:56
Я бы подчеркнул «иногда» в вашем втором абзаце. Изучение новых языков иногда не является полезным в практическом смысле вещей, но иногда это очень полезно. Я обнаружил, что когда я изучаю новый язык, я часто начинаю видеть потенциальные возможности его использования в местах, которые я бы не ожидал. Получение знаний о различных парадигмах и приобретение навыков использования различных инструментов (в том числе разных языков) - это очень практичный навык для современного разработчика программного обеспечения.
Daniel Pryden 23.10.2009 17:28:50
Что я сказал о практическом, так это то, что иногда люди хотят изучать другие языки как «серебряные пули» для многих проблем, с которыми мы сталкиваемся в процессе разработки, например: «Я собираюсь изучать этот язык во всех моих проектах, и это будет решать все». ", и, возможно, LISP не будет таким, возможно, он никогда не собирается писать в нем ни одной строки. Но то, что он узнал, читая LISP, могло помочь ему решать проблемы в других сферах его карьеры ... то же, что и у вас. Извините, если я не был более ясен, я стараюсь меньше сосать с моими навыками английского языка. :)
GmonC 23.10.2009 17:39:58

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

Пол Грэм был большим сторонником Lisp, и в своей книге « Хакеры и художники» он описывает, как он использовал возможности Lisp, чтобы доминировать в конкурентной борьбе при создании ViaWeb для магазинов Yahoo.

В других местах я видел диалекты Lisp, широко используемые в аэрокосмической промышленности, как инструменты написания сценариев для интегрированных сред, таких как Comet и AML . Лисп всегда будет привязан к ранним экспериментам ИИ в 1950-х годах.

2
23.10.2009 17:26:50

Да. Здесь я остановлюсь на Common Lisp, хотя Scheme также является превосходным языком, который может многое порекомендовать.

В Common Lisp у вас есть большой мультипарадигмальный язык, который предоставляет некоторые вещи, которые либо не существуют широко за пределами семейства языков Lisp, либо ограничены CL и даже более неясными / нишевыми языками.

Первая особенность, которую вы можете так или иначе получить из CL, Scheme и нескольких других диалектов, - это настоящая макросистема.

Я говорю «реальный», потому что система гораздо более полная, гибкая и надежная, чем, скажем, макросы препроцессора C. Очень сложно заставить макросы CPP надежно выполнять даже простые вещи (например, менять значения двух переменных или создавать foreachконструкцию), но это тривиально с макросами Lisp. Это оказывается очень мощным инструментом для введения новых абстракций и отказа от «стандартного» кода.

Второй особенностью, которая фактически ограничена Common Lisp, является CLOS, Common Lisp Object System. Несмотря на название, это не обычная ОО-система, подобная Java, с методами, являющимися частью определения класса. Вместо этого он обеспечивает полиморфизм через «универсальные функции», к которым прикрепляются методы, и по умолчанию позволяет вам выполнять множественную диспетчеризацию.

Я очень предпочитаю CLOS более обычному подходу к ориентации объектов, так как он делает ряд «шаблонов» (например, шаблон «Посетитель») совершенно ненужным и потому что расширение существующих универсальных функций очень просто; другие ненавидят его, потому что он требует чрезвычайно кавалерного подхода к инкапсуляции и потому что расширение универсальных функций становится, вероятно, слишком легким. В любом случае, CLOS достаточно отличается, так что я думаю, что стоит учиться только с другой точки зрения, которую он предоставляет.

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

Наконец, для многих классов задач Lisp - отличный практический язык. Он обеспечивает хорошую производительность (обычно не так быстро, как C, но значительно быстрее, чем большинство «языков сценариев»), безопасность, автоматическое управление памятью, приличную «стандартную библиотеку» функций и огромные возможности для легкого расширения.

31
28.10.2009 14:39:17
Это интерактивная природа программирования на Лиспе, которая мне нравится больше всего. Я пользуюсь этим каждый день.
Michael H. 23.10.2009 17:58:23
Я читал книгу SICP онлайн, я полагал, что Схема была просто реализацией LISP
Dave 23.10.2009 18:16:43
Технически Common Lisp и Scheme являются диалектами LISP Маккарти. Сегодня, однако, «LISP» является сокращением для первого.
grettke 23.10.2009 23:29:38
grettke: нет, "Лисп" - это сокращение.
Svante 26.10.2009 12:00:30

Вот доклад Google Tech, который стоит посмотреть о компании, которая в настоящее время производит большое и сложное программное обеспечение для авиационной отрасли в Common Lisp:

Лисп для высокопроизводительной обработки транзакций(Видео сейчас недоступно. Вот заметка Зака ​​Бина.)

В этом видео упоминаются и другие темы, в том числе Clojure, новый вариант Lisp для JVM (в настоящее время также ведется некоторая работа по разработке Clojure для CLR, но это не так уж и далеко), который стоит проверить способ решения проблем параллелизма. Смотрите сайт Clojure по адресу:

http://clojure.org/

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

Если вы заинтересовались Лиспом, и книга, которую вы нашли, не так уж хороша (у меня есть старая, которая для меня мало что сделала), книга Пола Грэма « О Лиспе» доступна бесплатно по адресу http: //www.paulgraham. com / onlisp.html и это очень хорошо. Общая идея Lisp одинакова для Common Lisp, Scheme, Emacs Lisp или Clojure, но специфика будет другой - так что имейте это в виду, читая книгу Грэма, которая в основном посвящена Common Lisp (с некоторыми упоминаниями о специфике Scheme). О Лиспе , пожалуй, не самая лучшая книга для начинающих, но стоит пройтись по ней и просто пролистать подробности, которые вы еще не готовы подробно изучить, чтобы увидеть, что там есть, особенно в отношении макросов, которые действительно исследует На Лисп .

8
12.01.2019 11:59:45

Прошло некоторое время с университета, но после того, как я прошел 3-й курс CS, который требовал изучения Лисп и написания программ на Лисп, рекурсивное написание и мышление было несложным делом. Не то чтобы у меня были проблемы с рекурсией до курса, но потом это была вторая натура. Я также использовал CLOS в курсе (Университет Торонто), но это было так давно, я почти не помню, что я делал.

1
23.10.2009 18:01:27
Курс искусственного интеллекта в Йорке имел курс логического программирования в качестве предварительного условия, и этим курсом были LISP и Prolog (курс AI был Java и Prolog, но другие семестры были LISP). Это было не так давно (около 6 лет).
FrustratedWithFormsDesigner 24.10.2009 21:53:45

Хорошие программисты открывают для себя столько разных парадигм программирования, сколько они могут - не столько языков программирования, сколько они могут.

Семейство LISP (есть несколько вариантов) очень полезно узнать. Ваша цель должна заключаться в функциональном программировании и лямбда-исчислении - парадигме, на которой основан LISP. Меньше сосредотачивайтесь на том, чтобы стать «асом» программистом LISP (это может занять годы).

Если вы находите, что функциональное программирование «переключает ваш переключатель», попробуйте взглянуть и на PROLOG - здесь парадигма основана на оценке клаузул Рога (логика предикатов).

Возможно, я провел последние 20 лет, зарабатывая на жизнь программистом на COBOL (OMG - у них все еще есть!), Но я думаю, что я лучший программист, потому что время, потраченное на изучение LISP, и ряда других языков программирования было действительно все о.

Взрыв...

10
23.10.2009 18:08:38

Как уже упоминали другие, Lisp уже не так популярен для общего программирования, и у него (IMO) есть некоторые серьезные проблемы при написании реальных систем, но, конечно, другие не согласны (например, большая часть программного обеспечения ITA написана на Lisp, и они делают сумасшедший банк).

Даже если вы никогда не пишете «настоящую» программу на Лиспе, ее стоит изучить. Существует много методов программирования, впервые появившихся в Lisp, которые, зная их, помогут вам написать лучший код на Python, Perl, Ruby, ML, Haskell и даже C ++. Например, посмотрите Perl высшего порядка , который показывает, как делать все виды удивительных трюков в Perl; Процитирую введение: «Вместо того, чтобы рассказывать вам, как прекрасен Lisp, я расскажу вам, как прекрасен Perl, и в конце вам не нужно будет знать какой-либо Lisp, но вы узнаете намного больше о Perl. [... ] Тогда вы можете перестать писать программы на C на Perl. Я думаю, вы найдете, что это будет хорошим изменением. Perl гораздо лучше работает на Perl, чем на медленной версии C. "

И есть некоторые замечательные книги, которые используют Lisp, и вам будет легче понять их, если вы знаете язык - SICP, « Парадигмы программирования искусственного интеллекта» Norvig и The Reasoned Schemer все приходят на ум как обязательные для чтения.

2
23.10.2009 18:13:57

Изучите lisp, чтобы узнать о макросах, а этот код - данные, и о том, что вы можете достичь просветления без самобичевания в C ++.

Изучите Common Lisp, чтобы узнать о макросах читателя и макросах компилятора. Я не знаю другого языка, на котором они есть.

Изучите схему продолжения.

Изучайте Clojure, потому что это сделает Java устаревшей :-)

4
5.11.2009 22:30:57
2016 год и Java по-прежнему сильны, в то время как Clojure остается неясным ... вернется к этому через 7 лет
redspidermkv 29.01.2016 11:21:59

Одним из преимуществ Lisp является то, что вы развиваете понимание префикса и удивляетесь, почему все остальные в мире не используют его тоже (как с Latexили vim)

+ 1 2 3 4 5 6 7 8 9

это гораздо проще код / редактировать / вставить , чем

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
4
9.11.2011 13:58:48
эффективная копирование-вставка на самом деле является аспектом, о котором я никогда не задумывался ;-) Но как насчет "(от 1 до: 9) суммы"
blabla999 12.12.2011 22:19:32
@ blabla999 Я думал больше на практике, как калькулятор. Я не понимаю, почему человечество не пошло "подожди минутку, разве не имеет смысла заставлять оператор" плюс "каким-то образом применяться ко всему, что следует?"
puk 12.12.2011 22:32:57

Некоторые люди здесь рекомендуют 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/

2
17.04.2018 09:34:49
Почему это важно, если это безвозмездно противоречиво?
Kevin 4.06.2012 04:07:13