Вопрос

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

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

Существует ли коммерческое приложение-убийца, написанное на Лиспе?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

В ответ на @lassevk:

alt text

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

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

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

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

Также хочу добавить:даже если вы найдете места, где Lisp будет иметь смысл, вы, вероятно, не убедите кого-либо еще в том, что его следует использовать поверх Java, C++, C#, Python, Ruby и т. д.

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

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

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

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

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

(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, вы, вероятно, упустили суть.

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

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

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

Один из наиболее часто повторяющихся мифов о LISP заключается в том, что он «мертвый». Хотя это правда, что Common Lisp не так широко используется, как, скажем, Visual Basic или Java, кажется странным описывать язык, который продолжает использоваться для новой разработки, и который продолжает привлекать новых пользователей как «мертвых». Некоторые недавние истории успеха LISP включают Viaweb's Пола Грэма, который стал магазином Yahoo, когда Yahoo купил свою компанию;ITA Software Airfare Prographare System и Shopping System, QPX, используемая онлайн -продавцом билетов Orbitz и другими;Игра Naughty Dog для PlayStation 2, Jak и Daxter, которая в значительной степени написана в изобретении LISP-диалекта LISP, специфичного для домена, называется «Компилятор которого сам написан в общей LISP»;и Roomba, автономный роботизированный пылесос, чье программное обеспечение написано в L, понижающему совместимому подмножеству обычного LISP.Возможно, еще более показательным является рост веб-сайта Common-lisp.net, который проводит проекты с открытым исходным кодом, и количество локальных групп пользователей LISP, которые возникли за последние пару лет.

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

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

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

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

Но если вы собираетесь этому научиться... обязательно прочтите На Лиспе

Ладно, возможно, я странный, но мне действительно не очень нравятся эссе Пола Грэма, а книга «Лисп» — действительно тяжелая книга, если вы еще не имеете некоторого представления о Common Lisp.Вместо этого я бы посоветовал выбрать Siebel. Практический Common Lisp.Что касается «приложений-убийц», Common Lisp, кажется, находит свое место в нишевых магазинах, таких как ИТА, поэтому, хотя не существует приложения, синонимичного CL, как Rails для Ruby, есть места в отрасли, где его используют, если немного покопаться.

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

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

Script-Fu от Gimp — болтовня.Это приложение-убийца фотошопа.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top