Почему я должен учиться шепелявить? [закрытый]


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

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

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

29 118

29 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

в ответ @lassevk:

alt text

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

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

убийца приложение написано на Лиспе: emacs. Lisp позволит вам расширить emacs по желанию, чтобы сделать почти все, что вы можете придумать, что может сделать редактор.

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

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

Я не могу ответить из первых рук, но вы должны прочитать, что Пол Грэм писал на Лиспе. Что касается части" killer-app", прочитайте бить средние.

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

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

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

любой язык выглядит намного сложнее, когда он не использует общие соглашения об отступах языка. Когда вы следуете за ними из 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))))))

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

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

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

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

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

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

один из наиболее часто повторяющихся мифы о Lisp заключается в том, что он "мертв." Хотя это правда, что Common Lisp не является так же широко используется, как, скажем, Visual Basic или Java, это кажется странным, чтобы описать язык, который продолжает использоваться для нового развития, и это продолжается привлечь новых пользователей как "мертвых"." Некоторые недавние успехи включают сюсюкать Viaweb Пола Грэма, который стал Yahoo Store, когда Yahoo купил его компания; авиаперелет ITA Software ценообразование и торговые системы, qpx успешно используется с помощью онлайн-продавца билетов Orbitz и другие; игра непослушной Собаки для PlayStation 2, Jak и Daxter, которые во многом написана домен-специфический диалект Лисп непослушный Собака придумана под названием Гол, чей компилятор сам написан общим языком Шепелявила; и робот-пылесос, автономная роботизированный пылесос, программное обеспечение которого пишется в L, а вниз совместимый подмножество Common Lisp. Возможно, еще более показательным является рост числа Common-Lisp.net паутина сайт, на котором размещен open-source Common Проекты Lisp и количество локальных Группы пользователей Lisp, которые возникли в последние пару лет.

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

--Eric S. Raymond,"как стать хакером"

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

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

но если вы собираетесь учиться it...by все средства, читайте На Лиспе

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

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

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

сценарий Gimp-Fu-это липсиш. Это приложение photoshop-killer.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

история успеха и неудачи : шепелявит на JPL

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

сравнение и анализ того, следует ли использовать Lisp вместо этого Ява: Lisp как альтернатива Java

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

не говорю, что это приложение-убийца, но похоже, что это может быть круто http://code.google.com/p/plop/

приложение убийцы? Поисковая система полета с помощью программного обеспечения ITA является одним.

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