Почему я должен учиться Lisp?

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

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

Есть ли там коммерческое приложение-убийца, написанное в Lisp?

Ответ 1

Одно из основных применений для Lisp - в искусственном интеллекте. Мой друг в колледже поступил в аспирантуру по ИИ, и для своего главного проекта он написал " Lights Out" решатель" в Lisp. В нескольких версиях его программы использовались несколько разные подпрограммы AI и тестирование на 40 или около того компьютеров дали некоторые довольно аккуратные результаты (я бы хотел, чтобы он был где-то для меня, чтобы я мог ссылаться, но я не думаю, что это так).

Два семестра назад я использовал Scheme (язык, основанный на Lisp), чтобы написать интерактивную программу, которая смоделировала процедуру Abbott и Costello "Кто на первом". Вход от пользователя сопоставлялся с некоторыми довольно сложными структурами данных (напоминающими карты на других языках, но гораздо более гибкими), чтобы выбрать, какой будет соответствующий ответ. Я также написал рутину для решения 3х3 слайд-головоломки (алгоритм, который можно легко расширить до более крупных головоломок).

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

Ответ 2

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

Теперь сложная проблема не такая сложная, как сложная. Сложной проблемой является проблема с множеством мелких деталей, но это не сложно. Написание системы бронирования авиабилетов - сложный бизнес, но с достаточным количеством денег и программистами это не сложно. Получите разницу?

Сложная проблема - это сложная задача, в которой традиционный разрыв и победа не работают. Управление роботом или работа с данными, которые не являются табличными (например, языки) или высокодинамичными ситуациями.

Lisp действительно хорошо подходит для проблем, где решение должно быть расширяемым; классический пример - текстовый редактор emacs. Он полностью программируется и, следовательно, имеет собственную среду программирования.

В своей знаменитой книге PAIP Норвиг говорит, что Lisp идеально подходит для поискового программирования. То есть программирование решения проблемы, которая не полностью понята (в отличие от системы онлайн-бронирования). Другими словами: сложные проблемы.

Кроме того, обучение Lisp напомнит вам о чем-то принципиальном, что было забыто: разница между Фон Нейманом и Тьюрингом. Как мы знаем, модель расчета Тьюринга - интересная теоретическая модель, но бесполезная как модель для проектирования компьютеров. С другой стороны, фон Нейманн разработал модель того, как должны выполняться компьютеры и вычисления: модель фон Неймана. Центральная модель Von Neumann состоит в том, что у вас есть только одна память, и сохраняйте как свой код, так и свои данные. Обратите внимание, что программа Java (или С# или что вам нравится) является проявлением модели Тьюринга. Вы устанавливаете свою программу в бетон, раз и навсегда. Тогда вы надеетесь, что сможете справиться со всеми данными, которые на него набрасываются.

Lisp поддерживает модель фон Неймана; нет четкой предопределенной границы между кодом и данными. Программирование в Lisp открывает ваш разум силе модели Von Neumann. Программирование в Lisp заставляет вас видеть старые концепции в новом свете.

Наконец, будучи интерактивным, вы научитесь взаимодействовать с вашими программами по мере их разработки (в отличие от компиляции и запуска). Это также изменяет способ программирования и способ программирования.

С этим вступлением я могу, наконец, ответить на ваш вопрос: найдёте ли вы места, где это затмевает "традиционные" языки?

Если вы являетесь продвинутым программистом, вам нужны расширенные инструменты. И нет инструмента, более продвинутого, чем Lisp. Или, другими словами: ответ "да", если ваши проблемы сложны. В противном случае.

Ответ 3

В ответ на @lassevk:

alt text

Ответ 4

сложный синтаксис??

Синтаксис lisp невероятно прост.

Приложение Killer написано в lisp: emacs. lisp позволит вам расширять emacs по своему усмотрению, чтобы сделать почти все, что вы можете думать о том, что редактор может сделать.

Но вы должны узнать только lisp, если хотите, и никогда не сможете использовать его на работе, но он все равно потрясающий.

Кроме того, я хочу добавить: даже если вы найдете места, где lisp будет иметь смысл, вы, вероятно, не будете убеждать кого-либо в том, что он должен использоваться над java, С++, С#, python, ruby ​​и т.д.

Ответ 6

Я запрограммировал в Lisp профессионально около года, и это определенно стоит изучить. У вас будет беспрецедентная возможность удалить избыточность из вашего кода, будучи в состоянии заменить весь шаблонный код функциями там, где это возможно, и макросами, где нет. Вы также сможете получить доступ к беспрецедентной гибкости во время выполнения, свободно перенося код и данные. Таким образом, ситуации, когда пользовательские действия могут вызвать необходимость динамического построения сложных структур, - это где Lisp действительно сияет. Популярные планировщики рейсов авиакомпаний написаны в Lisp, а также в CAD/CAM в Lisp.

Ответ 7

Если вам нравится программирование, вы должны научиться Lisp для чистой радости. XKCD отлично выражает интеллектуальное просвещение, которое происходит. Обучение Lisp для программиста - это то, что медитация для буддийского монаха (и я имел в виду это без какой-либо богохульной коннотации).

Ответ 8

Lisp очень полезен для создания небольших DSL. У меня есть копия Lisp в ящике, работающая на работе, и я написал небольшие DSL для опроса баз данных SQL Server и создания слоев данных и т.д. На С#. Все мои кодовые таблички теперь написаны в макросах Lisp, которые выводятся на С#. Я создаю HTML, XML, всевозможные вещи с ним. Хотя я бы хотел использовать Lisp для повседневного кодирования, Lisp может принести практические выгоды.

Ответ 9

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

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

Ответ 10

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

Ответ 11

Обучение LISP/Схема может не дать вам увеличенного пространства приложений, но это поможет вам лучше понять функциональное программирование, его правила и его исключения.

Это стоит потратить время, чтобы узнать разницу в красоте шести вложенных чистых функций и кошмар шести вложенных функций с побочными эффектами.

Ответ 12

От http://www.gigamonkeys.com/book/introduction-why-lisp.html

Один из наиболее часто повторяющихся мифы о Lisp заключаются в том, что он "мертв". Хотя верно, что Common Lisp не является как широко используется, например, Visual Basic или Java, кажется странным описывать язык, который по-прежнему используется для новой разработки и привлечь новых пользователей как "мертвых". Некоторые последние Lisp истории успеха включают Пол Грэм Виавеб, который стал Yahoo Store, когда Yahoo купил его Компания; Авиакомпания ITA система ценообразования и покупки, QPX, используется онлайн-продавцом билетов Orbitz и другие; Игра Naughty Dog для игры PlayStation 2, Jak и Daxter, которые в значительной степени специфический для домена диалект Lisp Naughty Собака, изобретенная под названием GOAL, чья компилятор сам написан в Common Lisp; и Roomba, автономной роботизированный пылесос, программное обеспечение которого записывается в L, вниз совместимое подмножество Common Lisp. Возможно, еще более рост Common-Lisp.net Web сайт, на котором размещается Common-Common Common Lisp, а количество локальных Lisp группы пользователей, которые возникли в последние пару лет.

Ответ 13

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

Но если вы узнаете это... непременно прочитайте Вкл Lisp

Ответ 14

Хорошо, я мог бы быть странным, но мне действительно не нравятся эссе Пола Грэма, и многое другое и Lisp - действительно грубая книга, если у вас уже нет понимания Common Lisp. Вместо этого, я бы сказал, пойдите для Siebel Практическое общее Lisp. Что касается "killer-apps", Common Lisp, похоже, находит свое место в нишевых магазинах, таких как ITA, поэтому пока нет это приложение, синонимом CL, как Rails для Ruby, есть места в промышленности, которые используют его, если вы немного копаете.

Ответ 15

Если вам нужно спросить себя, следует ли вам изучить lisp, вам, вероятно, не нужно.

Ответ 16

Обучение lisp поставит Javascript в совершенно ином свете! lisp действительно заставляет вас понимать как рекурсию, так и целые "функции как объекты первого класса" -paradigm. См. Статью Crockfords на Схема против Javascript. Javascript, пожалуй, самый важный язык сегодня, поэтому лучше понять его очень полезно!

Ответ 17

Я взял класс "lisp" в колледже еще в восьмидесятых. Несмотря на то, что все концепции представлены в классе, я остался без всякой признательности за то, что делает lisp отличным. Боюсь, что многие люди смотрят на lisp как на еще один язык программирования, и это то, что этот курс в колледже сделал для меня так много лет назад. Если вы видите, что кто-то жалуется на синтаксис lisp (или его отсутствие), есть хороший шанс, что они являются одним из тех людей, которые не смогли понять величия lisp. Я был одним из тех людей в течение очень долгого времени.

Только через два десятилетия, когда я возродил свой интерес к lisp, я начал "получать" то, что делает интересным для меня lisp - для меня в любом случае. Если вам удастся узнать lisp, если ваш мозг не раздувается закрытием и макросами lisp, вы, вероятно, пропустили эту точку.

Ответ 18

Gimp Script -Fu является губным. Это приложение для фотошоп-убийцы.

Ответ 19

Сложный синтаксис? Красота lisp заключается в том, что она имеет смехотворно простой синтаксис. Это просто список, где каждый элемент списка может быть либо другим списком, либо элементарным типом данных.

Это стоит узнать из-за того, как он улучшает способность кодирования мыслить и использовать функции как еще один тип данных. Это улучшит то, как вы кодируете императивный и/или объектно-ориентированный язык, потому что это позволит вам быть более умственно гибким с тем, как структурирован ваш код.

Ответ 20

Чтобы добавить к другим ответам:

Потому что курс SICP (доступны видеоролики здесь) является удивительным: учит вас Lisp и многое другое!

Ответ 21

Убийственное приложение? Franz Inc. имеет длинный список истории успеха, но в этот список входят только пользователи AllegroCL... Возможно, есть и другие. Мой любимый рассказ о Naughty Dog, так как я был большим поклонником игр Crash Bandicoot.

Для обучения Common Lisp я бы рекомендовал Практический общий Lisp. Он имеет практический подход, который, по крайней мере, для меня облегчал, чем другие книги, на которые я смотрел.

Ответ 22

Сегодня вы можете использовать Clojure для написания тестов и скриптов поверх виртуальной машины Java. Хотя в JVM есть другие языки Lisp, я думаю, что Clojure выполняет лучшую работу по интеграции с Java.

Бывают случаи, когда язык Java сам мешает писать тесты на Java-код (включая "традиционное коммерческое программирование" ). (Я не имею в виду, что в качестве обвинительного акта Java - другие языки страдают от одной и той же проблемы - но это факт. Поскольку тема, а не Java, я не буду разрабатывать. Пожалуйста, не стесняйтесь приступать к новой теме, если кто-то хочет обсудить это.) Clojure устраняет многие из этих препятствий.

Ответ 23

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

Самым большим препятствием, вероятно, будет признание вашего босса, ваших сверстников или ваших клиентов. Это то, с чем вам придется работать с ними. Выбор прагматичного решения, такого как Clojure, который может использовать текущую базу установки инфраструктуры Java, от JVM до библиотек, может вам помочь. Кроме того, если у вас есть Java-программа, вы можете сделать подключаемую архитектуру и написать для нее плагины Clojure и в итоге написать половину кода в Clojure.

Ответ 24

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

- Эрик С. Раймонд, "Как стать хакером"

http://www.paulgraham.com/avg.html

Ответ 25

Это тема, о которой я сам размышлял некоторое время, но я на самом деле не пришел к решению, поскольку обычно основное время - основная проблема...;)

И так как я не могу найти эти ссылки sofar в этом посте, я добавляю их для общественных интересов:

История успеха и неудачи: Листинг в JPL

Действительно впечатляющая история успеха: Lisp, используемой в корпорации Orbitz

Сравнение и анализ использования Lisp вместо Java: Lisp как альтернатива Java

Ответ 26

Не причина, но (тривиальная) поддержка AutoCAD LISP и DCL. Это удобный способ для написания сложных макросов (включая автоматизацию ActiveX), если вы не хотите использовать VBA или их С++ или .NET SDK, или если выражение DIESEL не сокращает его.

Многие функции AutoCAD на самом деле являются LISP процедурами.

Ответ 27

Синтаксис не имеет значения, читабельность - нет!

Ответ 28

Не сказать, что это приложение для убийцы, но похоже, что это может быть круто http://code.google.com/p/plop/

Ответ 29

Убийственное приложение? Поисковая система для полетов от ITA Software является одной из них.

Что касается "почему", это, скорее всего, сделает вас лучшим разработчиком и крайне маловероятно, чтобы вы стали хуже. Это может, однако, заставлять вас предпочитать диалекты lisp для других языков.