Как технически работает Prolog? Что под капотом?
Я хочу узнать больше о внутренностях Prolog и понять, как это работает.
Я знаю, как использовать его. Но не так, как это работает внутри. Как называются алгоритмы и концепции, используемые в Prolog?
вероятно, он строит какую-то древовидную структуру или ориентированный граф объектов, а затем по запросам пересекает этот граф с помощью сложного алгоритма. Возможно, глубинный Поиск. Возможно, есть какой-то исходный код, но было бы здорово прочитать сначала об этом с точки зрения высокого уровня.
Я действительно Новичок в ИИ, и понимание пролога кажется отличным способом начать, имхо. Моя идея-попытаться перестроить что-то подобное и полностью пропустить часть парсера. Мне нужно знать направления, в которых я должен проводить свои исследования.
7 ответов
AI-широкое поле, Пролог касается только символического AI. Что касается Prolog, внутренняя работа слишком сложна, чтобы объяснить здесь, но googling даст вам много ресурсов. Е. Г. http://www.amzi.com/articles/prolog_under_the_hood.htm .
проверьте также статьи Википедии, чтобы узнать о других областях ИИ.
как называются алгоритмы и концепции, используемые в прологе?
- логика программирования
- глубина-первых, откат поиск
- объединение
См. Sterling & Shapiro,искусство Пролог (MIT Press) для теории пролога.
вероятно, он строит какую-то древовидную структуру или направленный граф объектов, и тогда на запросы traveres, что график сложный алгоритм. Возможно, глубинный Поиск.
он не строит граф явно, что было бы невозможно даже с бесконечными пространствами поиска. Проверьте первые главы Russell & Norvig концепции пространства состояний поиск. Да, он выполняет поиск глубины с обратным отслеживанием, но нет, это не очень сложно. Это просто очень удобно и программирование альтернативных стратегий поиска не так уж сложно в прологе.
понимание пролога кажется отличным способом начать, имхо.
зависит от того, что вы хотите сделать, но знание пролога, безусловно, не повредит. Это совсем другой взгляд на Программирование. Знание Prolog помогло мне очень быстро понять функциональное программирование.
моя идея-попытаться перестроить что-то подобное и полностью пропустить часть парсера
Вы имеете в виду пропуск синтаксиса пролога? Если вы случайно знакомы со схемой или Lisp, то проверьте раздел 4.4 Abelson & Sussman где они объясняют, как реализовать вариант логического программирования схемы, в схеме.
вы также можете прочитать о Абстрактная Машина Уоррена
как правило, код пролога переводится в инструкции WAM, а затем выполняется более эффективно.
Я бы добавил:
языки программирования: интерпретатор на основе подхода Н. Самуил камень. Книга вышла из печати, но вы можете найти ее в университетской библиотеке. Он содержит реализацию Prolog в Pascal.
Тим Бадд " интерпретаторы Kamin на C++" (в постскриптуме)
стандарт ISO core для Prolog также содержит модель выполнения. Модель выполнения представляет интерес, поскольку она дает хорошую модель конструкций управления, таких как cut !/0, if-then-else ( - >) /2, catch/3 и throw/1. Он также объясняет, как conformantly дело с голым переменных.
презентация в стандарте ISO core не так уж плоха. Каждая управляющая конструкция описывается в виде прецедента прозы со ссылкой на абстрактную машину пролога, состоящую из стека, так далее.. Затем есть изображения, которые показывают стек до и после выполнения конструкции элемента управления.
самый дешевый источник ANSI:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+13211-1-1995+%28R2007%29
книга Стерлинга и Шапиро, упомянутые larsmans, на самом деле содержит модели исполнения Пролог. Это довольно приятно и ясно объясняет,"как работает Пролог". И это отличная книга!
есть и другие источники, которые вы можете попробовать. Наиболее примечательно, что некоторые книги Lisp строят педагогически ориентированные интерпретаторы прологов:
- On Lisp by paul Graham (в общем Lisp, используя-и, возможно, злоупотребляя-макросы)
- парадигмы искусственного Интеллектуальное Программирование Питера Норвига (в Common Lisp)
- структура и интерпретация компьютерных программ, Абельсон и Сассман (на схеме).
из них последний самый ясный (по моему скромному мнению). Однако вам нужно будет изучить некоторый Lisp (либо общий Lisp, либо схему), чтобы понять их.
Prolog использует подмножество логики предикатов первого порядка, называемое логикой Рога. Алгоритм, используемый для получения ответов, называется разрешением SLD.