Я изучал Лисп, чтобы расширить свой кругозор, потому что слышал, что он используется в программировании ИИ. После некоторых исследований мне еще предстоит найти примеры ИИ или что-нибудь на языке, что сделало бы его более склонным к нему.
Использовался ли Lisp в прошлом, потому что он был доступен, или есть что-то, чего мне просто не хватает?
Я не думал, что Лисп полезен только для ИИ, мне просто интересно, почему он для этого используется.
Я бы перефразировал вопрос так: «Какие особенности языка необходимы для жесткого ИИ?» Это правильный и полезный вопрос, и в результате только Lisp Forth и ассемблер имеют то, что нужно для создания жесткого ИИ.





Я предполагаю, что главной причиной была гибкость списков как базовой структуры данных.
в то время возможность превращать их во всевозможные составные объекты и новые вещи, такие как передача сообщений и полиморфизм, сделала его языком выбора; не специально для ИИ, а для больших и сложных задач. особенно когда они экспериментировали с концепциями.
Я всегда предполагал, что, будучи функциональным языком, он не делает различий между кодом и данными. Все, включая определения функций и вызовы функций, можно рассматривать как списки и изменять, как любые другие данные.
Таким образом, можно было легко написать самоанализирующийся, самомодифицирующийся код.
Это не потому, что это функционально. У Prolog есть то же свойство - все является «термином», а термины - это данные, а также код. (Пролог - это язык логического программирования, который также часто используется для ИИ)
Причудливый термин для этого называется гомоиконность - en.wikipedia.org/wiki/Homoiconicity.
Думаю, вы правы: Lisp был удобным инструментом для взлома. Это потому, что он не различает программу и данные. Это позволило хакерам очень легко манипулировать функциями, как и данными.
Но шепелявка довольно сложна для чтения людьми с ее фигурными скобками и отсутствием различия между данными и программой. Сегодня я не буду использовать lisp для какого-либо производственного кода AI (или, возможно, даже для прототипирования), но предпочел бы python для написания сценариев.
Еще одна вещь, которую следует учитывать, - это существующие библиотеки / инструменты в /, связанные с языком. Я не могу сравнивать библиотеки lisp с библиотеками python, но полагаю, что библиотеки и открытый исходный код сейчас имеют гораздо большее значение, чем раньше.
Этот ответ был вдохновлен следующим сравнением между lisp и python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
Лично я считаю, что Lisp легче читать, чем большинство языков, и я выучил его всего несколько недель назад. Да, Python особенно чист по сравнению с большинством языков, но если вы сравните lisp с чем-то вроде C++, он станет намного чище и легче для чтения. Во всяком случае, по моему опыту.
Лисп использовался в ИИ до конца 1980-х годов. Однако в 80-е годы Common Lisp был перепродан деловым миром как «язык искусственного интеллекта»; обратная реакция заставила большинство программистов ИИ перейти на C++ на несколько лет. В наши дни прототипы обычно пишутся на более молодом динамическом языке (Perl, Python, Ruby и т. д.), А успешные исследования обычно выполняются на C или C++ (иногда Java).
Если вам интересно узнать о 70-х ... ну, меня там не было. Но я думаю, что Lisp был успешным в исследованиях искусственного интеллекта по трем причинам (в порядке важности):
У меня нет Старая книга Питера Норвига об искусственном интеллекте, но предполагается, что это хороший способ научиться программировать алгоритмы ИИ на Лиспе.
Отказ от ответственности: я аспирант компьютерной лингвистики. Я знаю подполе обработки естественного языка намного лучше, чем другие поля. Возможно, Lisp больше используется в других подполях.
Lisp определенно все еще жив и здоров в мире машинного обучения / ILP.
У меня был курс бакалавриата по искусственному интеллекту, преподаваемый на языке С. У меня был курс повышения квалификации по искусственному интеллекту, который читался по книге Норвига. Книга на языке C посвящена алгоритмам и структурам ИИ. Книга Норвига была такой: «Давайте изучим LISP, пока мы читаем об истории искусственного интеллекта». На мой взгляд, полнейшая трата времени.
Одна из причин, по которой все, кажется, упускают из виду, заключается в том, что Джон Маккарти написал Лисп и был очень влиятельным компьютерным ученым, особенно в области ИИ. Естественно, большая часть его работы была реализована на Лиспе, и таким образом Лисп закрепился.
Common Lisp никогда не задумывался как язык ИИ, он был создан для использования в промышленности. Для исследования обычно используется Схема. И никогда, никогда не судите язык по его возрасту - он просто не пропорционален крутости, и наоборот. C старый, но крутой, так почему возраст Лиспа имеет значение?
Не знаю, верно ли, что Lisp БЫЛ использовался для ИИ до конца 1980-х годов. В 2016 году MIT останется довольно известным учреждением в области искусственного интеллекта. Рекомендуемый учебник для курса робототехники MIT - Artificial Intelligence by Patrick Henry Winston. Ко 2-му изданию главы этой книги по программированию разветвились в отдельную синхронизированную книгу - Lisp. Как следует из названия, программирование в Lisp - полностью. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Lisp породил Python, породивший Tensorflow. :)
Один из возможных ответов заключается в том, что ИИ - это набор очень сложных проблем, а Лисп - хороший язык для решения сложных проблем, а не только ИИ.
Относительно того, почему это так: макросы, общие функции и богатый самоанализ позволяют получить краткий код и легко ввести абстракции предметной области - это язык, который вы можете сделать более мощным. Для многих проблем это не нужно, и это связано с собственными расходами, но для других проблем нужна энергия, чтобы добиться прогресса.
Одна из причин заключается в том, что он позволяет вам расширять язык конструкциями, специфичными для вашего домена, делая его, по сути, языком, специфичным для предметной области. Этот метод невероятно мощный, поскольку он позволяет вам рассуждать о проблема, которое вы решаете, а не о перетасовке битов.
Можете ли вы предоставить или дать ссылку на пример этого?
@DuckMaestro: Примерно за 30 минут работы с макросами на этой неделе я реализовал специальную версию SQL Select с ошибками. Это выглядит так: (запрос SELECT * FROM dataset WHERE expr).
Встраивание решателя алгебры в Лисп youtube.com/… Встраивание языка схем в Лисп youtube.com/… Встраивание Лиспа в Лисп youtube.com/… Встраивание Пролога в Лисп - просто посмотрите всю серию
Я помню, как слышал, что, будучи функциональным языком, Lisp был очень хорошим выбором для реализации рекурсивных алгоритмов. Возможность отследить дерево и вернуться назад имеет важное значение при рассмотрении процессов принятия решений (обход) и конечного результата (листовой узел).
Об этом мне рассказали во время курса искусственного интеллекта в университете, где мы изучали Лисп.
Макросы в Lisp более мощные, чем что-либо еще, позволяя вам реализовать ООП всего в 50 строках кода Lisp, а REPL позволяет вам редактировать вашу программу, пока она все еще работает ... Только Lisp может легко редактировать свой собственный исходный код ...
Думаю, думать об этом только с точки зрения искусственного интеллекта неправильно. Такие вещи, как AI-winter и коммерческие эффекты на обычную шепелявку, отвлекают, если вы спрашиваете, почему он использовался для AI, а не почему он не часто используется сейчас ...
В любом случае, я думаю, это потому, что большая часть кода ИИ была по сути исследовательским. Lisp - отличный язык для исследовательского программирования, для реализации сложных алгоритмов, для самомодифицируемого и часто изменяемого кода. Другими словами, для исследовательского кода.
Сегодня я использую lisp для некоторых своих исследовательских программ (математика, обработка сигналов), потому что он более гибкий и мощный, чем большинство языков, но при этом генерирует более эффективный код, чем большинство языков. Обычно я могу получить производительность с коэффициентом +/- 2 от скорости, скажем, C++, но я могу реализовать вещи намного быстрее и справиться со сложностями, на которые у меня ушло бы гораздо больше времени, чем если бы я использовал C++, java, C#.
Хотя это отклоняется от темы. Я думаю, что ИИ-код какое-то время в основном писался на обычном шепелявке, потому что это мощный подход к исследованию кода. Это все еще есть; но по мере того, как алгоритмы «ИИ» стали лучше пониматься и изучаться, некоторые из них стало намного легче преподавать и использовать, поэтому они появлялись на языковых курсах старших курсов. Отсюда возникает вопрос о том, что люди уже знают, какие библиотеки доступны и что хорошо подходит для больших групп.
Lisp используется для AI, потому что он поддерживает реализацию программного обеспечения, которое очень хорошо вычисляет с помощью символов. Символы, символьные выражения и вычисления с ними лежат в основе Lisp.
Типичными областями ИИ для вычислений с символами были / являются: компьютерная алгебра, доказательство теорем, системы планирования, диагностика, системы перезаписи, представление знаний и рассуждения, языки логики, машинный перевод, экспертные системы и многое другое.
Поэтому неудивительно, что многие известные приложения ИИ в этих областях были написаны на Лиспе:
В этих областях существуют тысячи приложений, написанных на Лиспе. Очень часто для них требуются специальные возможности в области обработки символов. Один из них реализует специальные языки, у которых есть специальные интерпретаторы / компиляторы в этих доменах поверх Lisp. Lisp позволяет создавать представления для символьных данных и программ и может реализовывать все виды механизмов для управления этими выражениями (математические формулы, логические формулы, планы, ...).
(Обратите внимание, что в AI также используется множество других языков программирования общего назначения. Я попытался ответить, почему именно Lisp используется в AI.)
Да, исторически искусственный интеллект был больше связан с символическими вычислениями, чем с чем-либо еще. «AI зима» в 80-х годах, вероятно, был скорее кризисом символический AI - в то время произошло возрождение интереса к субсимвольным методам (нейронные сети, машинное обучение и т. д.). Реализации Лиспа обычно были довольно слабыми в числовых вычислениях. Я не знаю, улучшились ли они на этом фронте.
@ MaD70: зима 80-х, посвященная ИИ, была посвящена ИИ в целом. Военные приостановили большую часть финансирования, и ИИ в основном потерпел неудачу на коммерческом рынке. Даже те нейронные сети, которые существовали в то время. Если рассматривать этот ИИ как «новые методы разработки программного обеспечения» (с использованием правил, логики, нейронных сетей, сборки мусора и т. д.) - это тоже не удалось. Многое из этого даже не используется / не нравится сегодня.
Мое впечатление в то время и в ретроспективе было другим: я четко помню возрождение интереса как к исследованиям, так и к рынку (были даже специализированные нейронные процессоры) к субсимволическим методам во второй половине 80-х. начало 90-х, после десятилетий остракизма (см. мой ответ, где я упоминаю влияние критики перцептронов Мински и Паперта: stackoverflow.com/questions/683124/neural-networks-obsolete/…).
Символический ИИ потерпел неудачу, ИМО, из-за оборудования того времени (недостаточно мощного / дешевого) И потому, что такой резкий контраст между символическими и субсимвольными лагерями исключил любую синергию. W.r.t. «даже широко используются / нравятся сегодня»: я подозреваю, что некоторые из техник, разработанных в ИИ (в обоих лагерях), используются гораздо больше, чем можно подумать (к счастью, не больше раздумывая).
Просто пример: в конце 90-х некоторые из моих знакомых спрашивали меня о целесообразности проекта по контролю качества в текстильной сфере. Я сразу же упомянул нейронные сети как многообещающий подход к такой проблеме дискриминации (по сути, классификации изображений). Только с таким предложением через несколько недель они нашли уже разработанное программное обеспечение с использованием нейронных сетей и получили права на его распространение - гораздо более разумно, чем начинать проект, связанный с исследованиями и разработками.
@ MaD70: действительно ли QA в текстиле с NN и обработкой изображений AI? Несомненно, полезная работа ...
Как Лисп может плохо справляться с числовыми вычислениями? Очень легко преобразовать S-выражения для компиляции в код Fortran / C в программе на Лиспе. Сборка мусора сегодня намного популярнее, чем когда-то. CSS, SQL, менеджеры зависимостей проекта (make) - это популярные сегодня языки реляционной логики / ограничений, а Excel - популярный язык потока данных.
Более циничный ответ мог бы быть: «потому что он проиграл политическую войну ИИ между Японией и США в 1980-х». Есть забавный сообщение в блоге, которое размышляет о влиянии кончины компьютерной системы пятого поколения на Prolog.
>… Пожалуйста, не думайте, что Lisp полезен только для анимации и графики,> искусственного интеллекта, биоинформатики, B2B и электронной коммерции, интеллектуального анализа данных, EDA / полупроводников> приложений, экспертных систем, финансов, интеллектуальных агентов, знаний> управления, механического САПР , Моделирование и имитация, Естественный язык,> Оптимизация, Исследования, Анализ рисков, Планирование, Телекоммуникации и Интернет> Создание, просто потому, что это единственное, что они> перечислили. - Кент Питман