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

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

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

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

7.08.2008 13:54:03
Трудно откладывать на то, чего там нет.
Kaz 5.09.2012 17:34:40
Прочитайте резюме Филиппа Гринспуна . Это изобилует настоящей работой на Лиспе.
Kaz 18.06.2014 01:16:18
Также здесь . Гринспен работал над моделированием сети с коммутацией пакетов, проектированием DSP, проектированием процессора, компоновкой VLSI, автоматизацией машиностроения, автоматизацией перемещения по земле и так далее, используя Lisp или используя Lisp. Он помогал проектировать архитектуру PA-RISC компании Hewlett Packard, используя инструменты, разработанные на машине Lisp.
Kaz 18.06.2014 01:21:33
Вот некоторые приложения, разработанные в Лиспе - Emacs, G2, AutoCad, Igor Engraver и Yahoo Store
Arulx Z 22.11.2015 03:01:31
29 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

55
13.11.2011 18:45:44
Почему вы говорите, что Лисп хорош только для ИИ? Кроме того, это мультипарадигмальный язык. Функциональность - это только одна из нескольких возможных парадигм.
Luís Oliveira 18.09.2008 08:48:23
Я не сказал, что он используется только для ИИ, я сказал, что одним из его основных применений является ИИ. Вы читали это?
Justin Bennett 18.09.2008 12:11:18
«Пожалуйста, не думайте, что Common Lisp полезен только для баз данных, фреймворков модульного тестирования, спам-фильтров, анализаторов ID3, веб-программирования, серверов Shoutcast, интерпретаторов HTML-генерации и компиляторов HTML-генерации только потому, что это единственные вещи, которые были реализованы в Книга "Практические CL"
Mikael Jansson 20.09.2008 21:38:17
@JustinBennett да, ты это сказал. Здесь: «В итоге, изучение Lisp (или Схемы) может не дать много практических приложений, кроме AI». Я ненавижу, когда люди противостоят друг другу, будучи неправыми.
Luka Ramishvili 15.11.2011 12:21:45

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

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

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

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

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

46
7.08.2008 23:29:05
@Justin: Вероятно, стоит отметить, что ядро ​​emacs написано на C. Но это просто придирки - все команды написаны на elisp.
Bernard 7.08.2008 23:56:39
или, скорее, основной синтаксис lisp прост. defmacro позволяет расширить синтаксис, а некоторые из встроенных макросов (например, defmacro) могут быть невероятно сложными; лямбда-списки, вложенные обратные кавычки и т. д.
Aaron 26.03.2009 17:34:58
Почти справедливо сказать, что часть C в emacs - это клейкий код.
Luka Ramishvili 15.11.2011 12:38:48
Согласно справочному руководству по Emacs, «большинство команд редактирования в Emacs написаны на Лиспе; немногие исключения могли быть написаны на Лиспе, но вместо этого используйте C для эффективности». gnu.org/software/emacs/manual/html_mono/emacs.html#Intro
dpritch 4.08.2018 15:45:12

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

25
7.08.2008 14:00:39
+1. В этом ответе следует упомянуть Yahoo Stores, первое веб-приложение, частично написанное на lisp. Цитируя Википедию: в 1998 году Yahoo! Inc. купила Viaweb за 455 000 акций Yahoo! акции, оцененные примерно в 49 миллионов долларов, и переименованные в Yahoo! Хранить.
Steven Lu 4.04.2013 17:26:46

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

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

3
7.08.2008 14:01:22
Небольшое примечание: на Лиспе не подходит введение в Лисп, сначала прочитайте что-нибудь еще. Я рекомендую Практический Common Lisp.
Luís Oliveira 18.09.2008 08:50:39

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

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

2
7.08.2008 14:01:59

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

3
7.08.2008 14:12:15

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

0
12.08.2008 11:59:37

Любой язык выглядит намного сложнее, если не использовать общие соглашения о отступах в языке. Когда вы следуете за ними по Лиспу, вы видите, как он довольно легко выражает структуру синтаксического дерева (обратите внимание, что это не совсем правильно, потому что предварительный просмотр немного ложится; 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))))))
5
4.08.2013 14:58:51
Я думаю, что в твоих словах есть справедливая критика. Я только хочу сказать, что «это выглядит намного сложнее, как вы его представили, и выглядит намного яснее, как это представлено здесь». Я думаю, что вы должны согласиться с тем, что многие языки выглядят намного более запутанными, если их соглашения об отступах не соблюдаются. Кроме того, если мы сравним отступы, скажем, Java и Lisp, я бы сказал, что они, как правило, требуют примерно одинакового уровня знаний базовых конструкций каждого языка для правильного отступа. Но это справедливо, хотя и совершенно субъективно, сказать, что это выглядит сложно.
John with waffle 22.02.2010 17:27:03
Чтобы сделать его немного проще, вы можете использовать стандарт letи использовать defunв начале функции, чтобы определить, fnкак она не меняется.
Aaron Robson 25.08.2012 21:12:52
@FerretallicA На каком основании вы определяете, является ли что-то «легко читаемым человеком» или «самоописанием»? Сходство с английским? Является ли китайский язык легко читаемым человеком? Как насчет математической записи? Это «не легко читаемый человеком»? Подобные аргументы раздражают тарабарщину, потому что их скрытое сообщение: «Это не похоже на то, как я впервые научился рассуждать».
user713516 15.06.2013 16:15:33
Больше похоже на ваше «опровержение» звучит как «Whinge whinge». Попробуй тест sniff языка программирования. Возьмите кого-нибудь, кто раньше не программировал, и покажите ему страницу кода VB и страницу кода Lisp. Я с радостью поспорю с моим левым орешком, на котором из двух случайных наблюдателей будет легче получать значимые наблюдения.
nathanchere 17.06.2013 14:49:23
Интересно, что китайский, японский, корейский, шумерский, хинди или арабский непрограммист подумал бы о вашем довольно дерзком желании отказаться от яичка для поверхностного спора.
user713516 24.12.2013 22:03:22

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

17
13.08.2008 11:50:59

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

4
12.08.2008 14:51:46
Это потому что ты хороший программист. Плохие программисты вместо того, чтобы воздействовать на старые навыки новыми знаниями, думают на уже известных языках, а пишут на новых. Но почему вы используете Java после lisp? :) Java труднее всего использовать после Lisp, imo.
Luka Ramishvili 15.11.2011 12:31:34

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

4
12.08.2008 15:21:52
Я бы сказал наоборот: если вы уже понимаете lisp, потому что у вас есть опыт работы с подобным языком, то, вероятно, в этом нет необходимости. Если вы не понимаете, что может предложить LISP, вы можете извлечь выгоду из воздействия.
Mr Fooz 26.11.2008 14:46:54
@MrFooz нет похожих языков, которые могут устранить необходимость изучать шутливую часть lisp. Основные характеристики lisp не найдены ни на одном языке. Хотя большинство из них.
Luka Ramishvili 15.11.2011 12:36:02
В зависимости от ваших целей. Если ты хочешь умереть, тебе не нужно дышать. Но это не значит, что вы не должны.
mimoralea 27.05.2014 00:03:55

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

3
20.08.2008 09:58:38
Самый важный язык? Я думаю нет, сэр.
TraumaPony 29.11.2008 04:58:35
Ну, он доступен практически на любом устройстве с веб-браузером (и, возможно, на некоторых его нет), поэтому, что касается языков для запуска приложений конечного пользователя, он, вероятно, имеет самое высокое проникновение среди всех языков программирования на планете. , Очевидно, вы могли бы иметь совершенно другое мнение о том, что важно. Будет ли он использоваться для лечения рака? Возможно нет. Но, нравится вам это или нет, это будет одним из краеугольных камней (веб) разработки приложений на долгие годы.
Erlend Halvorsen 15.11.2009 14:33:18
Я пошел по тому же пути! Хотя я уже использовал функциональные возможности Javascript и возможности создания прототипов, после изучения Lisp Javascript, тем не менее, был для меня новым языком.
Luka Ramishvili 15.11.2011 12:34:38

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

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

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

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

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

1
9.12.2008 10:23:22

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

9
26.08.2008 09:51:45

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

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

2
26.08.2008 09:53:07

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

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

2
26.08.2008 10:03:05

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

9
26.08.2008 10:48:14
Я использую dotlisp.sourceforge.net/dotlisp.htm для этого.
Mark Hurd 21.05.2010 05:21:13

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

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

4
30.08.2008 22:47:55
Я второй это. В настоящее время я нахожусь на втором наборе в Лисп, 5 лет вне школы. Один термин из Lisp, когда вы все еще зеленый, может не дать адекватного эффекта - я помню, что сосредоточился только на метапрограммировании, и еще не оценил метапрограммирование и гибкость.
Aaron 30.12.2008 05:20:26

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

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

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

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

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

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

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

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

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

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

127
13.03.2015 18:29:09
«но с достаточным количеством денег и программистами это не сложно», - сказал он, учитывая, что достаточно много программистов становится невозможным ;-)
Jonas Kölker 26.02.2009 08:44:20
Я читал о способности lisps генерировать код на лету, но я также читал, что он может быть скомпилирован ... Существуют ли реализации, которые могут смешивать интерпретированное и скомпилированное выполнение? или которые содержат там собственный компилятор?
centaurian_slug 5.12.2011 12:35:43
@centaurian_slug: Да, абсолютно. Это часть власти. Любая версия, которая не была преднамеренно повреждена, будет иметь свой компилятор / интерпретатор, доступный во время выполнения. Так, например, разработчик может войти в специальное соединение на своем веб-сервере, выполнить некоторую отладку, обновить некоторые определения классов и функций и, возможно, перекомпилировать все, что полагалось на эти определения, если это необходимо. Все, пока сервер запущен и работает. Вероятно, это не законно на предприятии, который беспокоится о совместимости с SOX, но это одна из причин, по которой в отраслях используются такие мозговые языки, как Java и C #
James 23.03.2012 14:05:58

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

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

2
15.09.2008 15:16:51

В ответ на @lassevk :

альтернативный текст

58
23.05.2017 12:10:32

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

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

1
24.09.2008 23:26:31

Скрипт-фу у Гимппа губный. Это приложение для фотошопа-убийцы.

3
2.10.2008 15:56:17

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

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

2
17.01.2017 10:40:38

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

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

4
27.11.2008 05:34:02

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

0
29.11.2008 04:04:49

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

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

0
9.12.2008 10:42:27

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

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

4
2.04.2010 03:40:33

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

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

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

4
6.08.2011 22:06:35