Я изучал Lisp, чтобы расширить свой кругозор, потому что я слышал, что он используется в программировании ИИ. После некоторого изучения я все еще не нашел примеров искусственного интеллекта или чего-либо еще в языке, который бы сделал его более склонным к нему.
Использовался ли Lisp в прошлом, потому что он был доступен, или мне чего-то не хватает?
lisp
artificial-intelligence
Кристиан Ромо
источник
источник
Ответы:
Лисп использовался в искусственном интеллекте до конца 1980-х годов. Однако в 80-х Common Lisp был перепродан деловому миру как «язык искусственного интеллекта»; обратная реакция вынудила большинство программистов ИИ на C ++ в течение нескольких лет. В наши дни прототипы обычно пишутся на более молодом динамическом языке (Perl, Python, Ruby и т. Д.), А реализации успешных исследований обычно на C или C ++ (иногда на Java).
Если вам интересно про 70-е ... ну, меня там не было. Но я думаю, что Лисп был успешен в исследованиях ИИ по трем причинам (в порядке важности):
У меня нет старой книги Питера Норвига об ИИ , но она должна быть хорошим способом научиться программировать алгоритмы ИИ в Лиспе.
Отказ от ответственности: я аспирант в области компьютерной лингвистики. Я знаю подполе обработки естественного языка намного лучше, чем другие области. Возможно, Лисп используется больше в других подполях.
источник
Artificial Intelligence by Patrick Henry Winston
. Ко 2-му изданию главы программирования этой книги разветвляются на свои собственные, синхронизированные, книгиLisp
. Как следует из названия, программирование полностью вLisp
. people.csail.mit.edu/phw/Books/LISPBACK.HTMLLisp используется для AI, потому что он поддерживает реализацию программного обеспечения, которое очень хорошо вычисляет символы. Символы, символические выражения и их вычисления лежат в основе Lisp.
Типичными областями ИИ для вычислений с символами были / являются: компьютерная алгебра, доказательство теорем, системы планирования, диагностика, системы перезаписи, представление знаний и рассуждения, логические языки, машинный перевод, экспертные системы и многое другое.
Тогда неудивительно, что многие известные приложения ИИ в этих областях были написаны на Лиспе:
В этих областях написаны тысячи приложений, написанных на Лиспе. Очень распространенным для них является то, что им нужны специальные возможности в области символьной обработки. Один реализует специальные языки, которые имеют специальные интерпретаторы / компиляторы в этих доменах поверх Lisp. Lisp позволяет создавать представления для символических данных и программ и может реализовывать все виды механизмов для управления этими выражениями (математические формулы, логические формулы, планы, ...).
(Обратите внимание, что в AI также используется множество других языков программирования общего назначения. Я попытался ответить, почему в AI особенно используется Lisp.)
источник
Одна из причин заключается в том, что он позволяет расширять язык конструкциями, специфичными для вашего домена, что делает его по сути языком, специфичным для домена. Эта техника невероятно мощная, так как позволяет вам рассуждать о проблеме, которую вы решаете, а не перетасовывать биты.
источник
Я всегда думал, что, будучи функциональным языком, он не различает код и данные. Все, включая определения функций и вызовы функций, можно рассматривать как списки и изменять как любые другие данные.
Таким образом, самопроверяющийся, самоизменяющийся код может быть написан легко.
источник
Один из возможных ответов заключается в том, что ИИ - это набор очень сложных проблем, а Лисп - хороший язык для решения сложных проблем, а не только ИИ.
Почему это так: макросы, универсальные функции и богатый самоанализ позволяют создавать краткий код и легко вводить абстракции доменов - это язык, который вы можете сделать более мощным. Для многих проблем это не нужно, и оно сопряжено с собственными затратами, но для других проблем эта сила необходима, чтобы добиться прогресса.
источник
Я думаю, что неправильно думать об этом только с точки зрения ИИ. Такие вещи, как AI-зима и коммерческие эффекты на обычном шутнике, отвлекают, если вы спрашиваете, почему он использовался для AI, а не почему он не часто используется сейчас ...
Во всяком случае, я думаю, это потому, что большая часть кода AI была в основном исследовательским кодом. Lisp - отличный язык для исследовательского программирования, для реализации сложных алгоритмов, для самоизменяющегося и часто модифицируемого кода. Другими словами, для исследования кода.
Сегодня я использую lisp для некоторых моих исследовательских программ (математика, обработка сигналов), потому что они более гибкие и мощные, чем большинство языков, и в то же время генерируют более эффективный код, чем большинство языков. Обычно я могу получить производительность в пределах +/- 2, скажем, скорости c ++, но я могу реализовать вещи намного быстрее и справиться со сложностью, которая заняла бы у меня гораздо больше времени, чем у меня, если бы я использовал c ++, java, c #.
Это бродит не по теме, хотя. Я думаю, что код AI был написан в основном на некоторое время, потому что это мощный подход к исследованию кода. Это все еще есть; но по мере того, как алгоритмы «ИИ» становились лучше поняты и изучены, некоторые из них стало намного легче учить и использовать, поэтому они появлялись на разных языках года на курсах старшекурсников. Оттуда становится проблемой то, что люди уже знают, какие библиотеки доступны, и что хорошо работает для больших групп.
источник
Я предполагаю, что главной причиной была гибкость списков в качестве базовой структуры данных.
в то время, будучи способным превращать их во все виды составных объектов, а также в новые вещи, такие как передача сообщений и полиморфизм, сделали его предпочтительным языком; не специально для ИИ, но для больших, сложных задач. особенно когда они экспериментировали с концепциями.
источник
Я думаю, что вы правы: Лисп был удобным инструментом для взлома вещей. Это потому, что в нем мало что различалось между программой и данными. Это позволило хакерам очень легко манипулировать функциями, как данные.
Но людям довольно трудно читать lisp, с его скобками и отсутствием различия между данными и программами. Сегодня я не буду использовать lisp для какого-либо производственного кода AI (или, возможно, даже для создания прототипов), но я бы предпочел Python для сценариев.
Еще одна вещь, которую следует учитывать, это существующие библиотеки / инструменты в / связанные с языком. Я не в состоянии сравнивать библиотеки lisp с библиотеками python, но я полагаю, что библиотеки и open source имеют гораздо большее значение, чем раньше.
Этот ответ был вдохновлен следующим сравнением между lisp и python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
источник
Я помню, что, будучи функциональным языком, Lisp был очень хорошим выбором для реализации рекурсивных алгоритмов. Возможность отследить дерево и вернуться обратно очень важна при рассмотрении процессов принятия решений (обход) и конечного результата (конечный узел).
Об этом мне рассказали во время курса ИИ в университете, где мы изучали Лисп.
источник
Более циничным ответом может быть «потому что он проиграл политическую войну ИИ между Японией и США в 1980-х годах». Есть забавный пост в блоге, в котором рассказывается о влиянии гибели компьютерной системы пятого поколения на Пролог .
источник