Подтвердить что ты не робот

Является ли обучение LISP полезным во все эти дни?

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

4b9b3361

Ответ 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

Clojure: a Lisp на виртуальных машинах .NET и Java

GNU CLISP.

CMU Common Lisp

Ответ 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 по адресу:

http://clojure.org/

и, в первую очередь, сначала посмотрите ссылку в правом верхнем углу этой страницы на несколько великолепных скринкастов с обзорами проблем параллелизма и функциями 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 в курсе (Университет Торонто), но это было так давно, я едва помню, что я сделал.