В виду того, что в данный момент изучаю и пытаюсь использовать данный язык программирования, то возник вопрос, где же взять информацию на его счет. Конечно же есть замечательная книга Братко, которую я медленно, но верно изучаю. Но хочется изучать и еще как-то, и тут на помощь приходят туториалы. Нашел один, с виду неплохой(http://classes.soe.ucsc.edu/cmps112/Spring03/languages/prolog/PrologIntro.pdf). Решил переводить его, поэтому хэштэг 1 и поставил. Буду публиковать по частям.
1.Введение
Логическое программирование это парадигма программирования, основанная на математической логике(тут могу посоветовать хорошую книгу - Чень Ч., Ли Р. Математическая логика и автоматическое доказательство теорем). В этой парадигме программист задает отношения между данными(они образуют программу) и затем создает запросы к среде выполнения(обычно это интерактивный интерпретатор) для того, чтобы узнать, существуют ли заданные отношения, или нет. Говоря другим языком, программа на логическом языке программирования путем определения в явном виде фактов и правил, определяет базу знаний из которое некоторое знание(конкретное) может быть извлечено. Этот стиль программирования популярен для основанных на данных интерфейсах, экспертных системах, и автоматических доказывателей теорем(спец. по, которое доказывает теоремы). В этом туториале мы изучим Prolog, язык логического программирования. Реализация(среда выполнения) – Swi-Prolog(http://www.swi-prolog.org/).
Вы можете заметить, что Prolog чем-то похож на функциональные языки, такие как Hugs(автор немного юлит, Hugs – это вообще-то среда для выполнения для языка Haskell). Программа на функциональном языке состоит из последовательностей определений функций – в то же время как программа на Prolog состоит из последовательностей определений отношений. Обе данные парадигмы опираются на рекурсивные определения. Разница состоит в “движке” исполнения – т.е. в императивных частях языков. Среда выполнения в функциональном языке вычисляет выражение конвертируя его в ацикличный граф(граф без циклов), редуцируя этот граф в нормальную форму, которая представялет собой вычисленное значение. Среда выполнения Prologа же не сколько вычисляет ответ, сколько производит дедукцию ответа из заданных отношений. Можно сказать, что вместо значения которое нужно вычислить, среда Prolog на вход получает вопрос:
Для каких значений параметров выражение вычисляется в значение “истина”?
Вы увидите, что Prolog достаточно сильно отличается от других языков программирования, которые вы до этого изучали. Для начала, в Prolog нет типов. Вообще говоря, базовая основа среды логического программирования не содержит в себе и литеральных значений. Идентификаторы, начинающиеся с символов в нижнем регистре определяют значения данных(как например перечисления в C#), в то время как все другие идентификаторы определяют переменные. Несмотря на то, что основные элементы Prolog безтиповы, большинство реализаций обладают поддержкой операций над строками и числами. Также, в Prolog есть встроенные механизмы для описания кортежей и списков. Вы можете найти в этом сходство с Hugs.
-----------------------------------------------------------------------------
Вот введение и подошло к концу. Надеюсь, что не заброшу это дело. Есть некоторая видная невооруженным глазом кривость, но надеюсь, что мои дальнейшие переводческие изыскания помогут хоть кому-то, и я сам прокачаюсь достаточно, чтобы это не смотрелось столь криво. Одна из фишек – я сразу же публикую перевод. То есть без глубокой вычитки. Думаю, что только так можно поднять базовое качество перевода.
Комментариев нет:
Отправить комментарий