Почему Lisp используется для ИИ?

Я изучал Lisp, чтобы расширить свои горизонты, потому что я слышал, что он используется в программировании ИИ. Проведя некоторое исследование, мне еще предстоит найти примеры ИИ или что-либо на языке, который сделает его более склонным к нему.

Использовался ли Lisp в прошлом, потому что он был доступен, или есть что-то, что мне просто не хватает?

Ответ 1

Lisp Используется в ИИ до конца 1980-х годов. Однако в 80-е годы Common Lisp перепродан в бизнес-мире как "язык ИИ"; задержка заставила большинство программистов ИИ на С++ в течение нескольких лет. В наши дни прототипы обычно написаны на более раннем динамическом языке (Perl, Python, Ruby и т.д.), А реализации успешных исследований обычно на C или С++ (иногда Java).

Если вам интересно о 70-х... ну, меня там не было. Но я думаю, что Lisp был успешным в исследовании ИИ по трем причинам (в порядке важности):

  • Lisp - отличный инструмент для создания прототипов. Это было самое лучшее в течение очень долгого времени. Lisp по-прежнему отлично справляется с проблемой, которую вы еще не знаете, как решить. Это описание отлично характеризует ИИ.
  • Lisp хорошо поддерживает символическое программирование. Старый ИИ также был символическим. Он также был уникальным в этом отношении в течение длительного времени.
  • Lisp очень мощный. Различие в коде/данных слабее, поэтому оно кажется более расширяемым, чем другие языки, потому что ваши функции и макросы выглядят как встроенные.

У меня нет старой книги А. И. Норвига, но он должен быть хорошим способом научиться программировать алгоритмы AI в Lisp.

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

Ответ 2

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

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

Неудивительно, что многие известные приложения AI в этих доменах были написаны в Lisp:

  • Macsyma - первая большая система компьютерной алгебры.
  • ACL2 как широко используемый теоретический метод, например, используемый AMD.
  • DART как планировщик логистики, используемый во время первой войны в Персидском заливе военными США. Считается, что это приложение Lisp выплатило все инвестиции США в исследования ИИ в то время.
  • SPIKE, приложение планирования и планирования для космического телескопа Хаббла. Также используется несколькими другими телескопами.
  • CYC, одна из крупнейших программных систем, написанных. Представление и рассуждение в области знания человеческого здравого смысла.
  • METAL, одна из первых коммерчески используемых систем перевода на естественном языке.
  • American Express 'Assistator Assistator, который проверяет транзакции по кредитным картам.

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

(Обратите внимание, что в ИИ также используется множество других языков программирования общего назначения. Я попытался ответить, почему именно Lisp используется в ИИ.)

Ответ 3

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

Ответ 4

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

Таким образом, самоанализирующий, самомодифицирующийся код может быть легко написан.

Ответ 5

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

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

Ответ 6

Я думаю, что неправильно думать об этом только с точки зрения ИИ. Такие вещи, как AI-winter и коммерческие эффекты на общий lisp, отвлекают, если вы спрашиваете, почему он использовался для ИИ, а не почему он не часто используется сейчас...

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

Сегодня я использую lisp для некоторых из моих исследовательских кодов (математика, обработка сигналов), потому что они более гибкие и мощные, чем большинство языков, но при этом создают более эффективный код, чем большинство языков. Обычно я могу получить производительность в пределах +/- 2, скажем, на скорости С++, но я могу реализовать вещи намного быстрее и справиться со сложностью, которая потребует гораздо большего времени, чем если бы я использовал С++, java, С#.

Тем не менее, это блуждает. Я думаю, что код AI был в основном написан общим lisp на некоторое время, потому что это мощный подход к исследованию кода. Это все еще есть; но поскольку алгоритмы "ИИ" стали лучше поняты и исследованы, части из них были намного легче обучать и использовать, поэтому они появились в языках, отличных от года, на курсах бакалавриата. Оттуда это становится проблемой того, что люди уже знают, какие библиотеки доступны и что хорошо работает для больших групп.

Ответ 7

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

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

Ответ 8

Я думаю, что вы правы: Lisp был удобным инструментом для взлома. Это связано с тем, что он не различал много программ и данных. Это позволило хакерам легко манипулировать функциями, точно так же, как и данные.

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

Еще одна вещь, которую следует учитывать, это существующие библиотеки/инструменты в /, связанные с языком. Я не могу сравнивать библиотеки Lisp с библиотеками python, но я думаю, что библиотеки и open source имеют гораздо больше времени, чем раньше.

Этот ответ был вдохновлен следующим сравнением между Lisp и python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

Ответ 9

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

Это было сказано мне во время курса ИИ в университете, где мы изучали Lisp.