Swi prolog как запустить программу

Я пытаюсь работать с Алеф с помощью Swi-prolog. Кто-нибудь может рассказать мне, как запустить эту программу, если у меня есть файл с именем train.pl (включая фон, положительные и отрицательные примеры). Что я могу сделать, чтобы запустить мою программу и получить результат? Кстати, я уже скачал Aleph.pl для своей программы. Когда я его запустил, он выглядел так: ОШИБКА: c: /users/mac/downloads/aleph.pl: 97: Неверный контекст: arithmetic_function / 1 можно использовать только в директиве

Комментарии (6)

Где программа алеф? Что находится в строке 97 и соседних строках?

Это программа из 10 000+ строк, мы не собираемся ее отлаживать. Произвести stackoverflow.com/help/mcve

Я хочу знать, что скачал Aleph с официального сайта и почему возникают такие ошибки? Где вы взяли Алеф?

Я этого не сделал. Если вы не знаете, официальная ли это версия, вам лучше связаться с автором.

Ладно, все равно ура.

17.06.2018 01:18

Оператор pass в Python — это простая концепция, которую могут быстро освоить даже новички без опыта программирования.

Prolog 2: Установка и работа с SWI Prolog

Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции — это способ манипулировать массивами и играть с массивами данных. Благодаря.

Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний.

Все о массиве Dependency и его связи с useEffect.

Toor — Travel Booking Angular Template один из лучших Travel https://reddeveloper.ru/questions/kak-zapustit-programmu-aleph-s-pomoshch-yu-swi-prolog-GGygB» target=»_blank»]reddeveloper.ru[/mask_link]

Быстрый запуск программы в среде SWI-Prolog. Наша первая программа

Запустите среду программирования SWI-Prolog с помощью утилит swipl.exe и swipl-win.exe, которые запускают интерпретатор. Вторая утилита позволяет выбрать файл с исходным кодом при помощи мыши. Выбранный файл загружается в интерпретатор, после чего программа уже загружена, можно писать запросы к ней.

Загрузите исходный файл с программой в интерпретатор:

Для этого используется команда consult(file), которая загружает file или file.pl в интерпретатор. [file] — более короткая форма записи для consult(file), используемая в интерпретаторе, может использоваться для загрузки сразу нескольких файлов [file1, file2].

Если вы запустили интерпретатор swipl-win.exe, то можно загрузить исходный файл через меню File → Consult.

После загрузки файла в интерпретаторе появится сообщение об успешной загрузке программы: «% c:/soft/prolog/swipl 8.0.3/sourceok/0001 — sokrat01.pl compiled 0.00 sec, 0 clauses»

После того, как исходный код загружен в интерпретатор, в нем можно писать запросы. Запросы представляют собой обращения к функциям загруженной программы, написанные после знака вопроса (?-) в интерпретаторе. Запрос ДОЛЖЕН оканчиваться точкой (.)

Допустим вы загрузили следующую программу из файла sokrat.pl (А вы ждали программу Hello, World? 🙂

Три примера решения задачек на Прологе


% Сократ — человек human(‘Сократ’). % Платон — тоже человек human(‘Платон’). % Чтобы некто был смертным, он должен быть человеком mortal(Someone) :- human(Someone).

Далее вводим запросы после знака приглашения к вводу запросов ?- Если после загрузки программы это приглашение не появилось, то нажмите точку (.)

Введите запрос: mortal(‘Море’). Обязательно в конце запроса символ точки (.)
Появится ответ: false. — «ложь».
Введите запрос:mortal(‘Сократ’).
Появится ответ:true. — «истина»

Поздравляем! Вы научились работать и программировать в среде SWI-Prolog!

Разбираем подробнее вашу первую программу

Итак, из файла sokrat.pl вы загрузили следующую программу:

% Сократ — человек human(‘Сократ’). % Платон — тоже человек human(‘Платон’). % Чтобы некто был смертным, он должен быть человеком mortal(Someone) :- human(Someone).

Читайте также:
Почему не включается программа стиральной машины индезит

Разбёрем, что она делает и что означают её операторы.

human(‘Сократ’). Эта строка объявляет Сократа человеком (human). То есть относит его к категории «человек».

human(‘Платон’). Эта строка и Платона относит к категории «человек». Нам что, жалко?
mortal(Someone) :- human(Someone). Это строка посложнее, но не очень.

Сейчас разберёмся…

Она говорит о том, что некто (Someone) относится к категории смертных (mortal), если этот некто относится к категории «человек».

Знак :- — это и есть условие «если».
Сам оператор можно прочитать (записать) и так: смертный(кто-то), если человек(кто-то).

Someone — это переменная, которая заранее не определена, но она может принимать значения, которые вы вводите в запросе.

Далее после знака приглашения к вводу ?- мы вводим запрос: mortal(‘Море’).
То есть мы спрашиваем, относится ли «Море» к категории смертных (mortal).
Чтобы это проверить система подставляет значение «Море» в условие mortal(Someone) :- human(Someone).
После подстановки ‘Море’ условие приобретает вид: mortal(‘Море’) :- human(‘Море’).
Далее система ищет в программе оператор human(‘Море’).

Но его в программе нет. И потому…
Система выводит false. (ложь).
То есть ‘Море’ не mortal, то есть не смертно, так как не относится к категории «человек» (human).

Далее мы вводим запрос: mortal(‘Сократ’).
То есть мы спрашиваем, относится ли «Сократ» к категории смертных (mortal).

Чтобы это проверить система подставляет значение «Сократ» в условие mortal(Someone) :- human(Someone).

После подстановки ‘Сократ’ условие приобретает вид: mortal(‘Сократ’) :- human(‘Сократ’).
Далее система ищет в программе оператор human(‘Сократ’).
Такой оператор в программе есть! Ура! И потому…
Система выводит true.

(истина).
То есть ‘Сократ’ mortal, то есть смертен, так как относится к категории «человек» (human).
Вот и всё! Сложно? Или не очень?

Пишите в комментариях…

Если вы не работаете в Linux, то можете перейти к следующему примеру.

Работа в SWI-Prolog в Linux

Графический интерфейс можно использовать в linux. Для этого необходимо запустить интерпретатор командой swipl и выполнить команду emacs., после чего будет запущена среда разработки. Emacs позволяет при помощи мыши открывать файлы, а затем загружать их содержимое в интерпретатор при помощи пунктов меню compile→consult selection:

После того, как исходный код загружен в интерпретатор (запуск командой swipl), в нем можно писать запросы. При изменении части программы, достаточно выполнить повторный consult selection для нее.

Источник: verim.org

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ПРЕДИКАТОВ

ЦЕЛЬ: Знакомство с интерпретатором SWI/PROLOG, включая использование меню, создание программных файлов, запуск и трассировку программ на SWI/PROLOG.

ГЛАВНОЕ МЕНЮ

В папке с установленным SWI/PROLOG войдите в директорию pl/bin, содержащую файл plwin.exe, и запустите его. На экране появится главное меню и главное (диалоговое) окно с приглашением SWI/PROLOG (см рис.1).

Рис.1 Вид диалогового окна SWI/PROLOG

Главное меню можно сделать активным, нажав F10 или Alt. Когда главное меню активно, его элементы можно выбрать с помощью клавиш управления курсором () и последующим нажатием клавиши Enter. Выбирать элементы главного меню можно также и мышью.

ПЕРВАЯ ПРОГРАММА

на Прологе состоит из фактов и правил, которые образуют базу знаний Пролог-программы, и запроса к этой базе, который задает цель поиска решений.

описывают отношение между объектами, которые являются аргументами предиката.

Констатируют наличие заданного предикатом отношения между указанными объектами.

Констатация факта в предложениии

Эллен любит теннис.

в синтаксисе Пролога выглядит так:

Имя предиката ( функтора ) и объекта должно начинаться с маленькой буквы и может содержать латинские буквы, кириллицу, цифры и символ подчеркивания (_). Кириллица используется наравне с латинскими буквами. Обычно предикатам дают такие имена, чтобы они отражали смысл отношения. Например: main, add_file_name. Два предиката могут иметь одинаковые имена, тогда система распознает их как разные предикаты, если они имеют различное число аргументов ( арность ). Например, любит/2, любит/3.

Читайте также:
Как вытащить видео из программы

Имя предиката может совпадать с именем какого-либо встроенного предиката SWI/PROLOG-а. Однако, если совпали имена пользовательского и встроенного предиката, то при обращении к нему (либо из интерпретатора, либо из программы), будет вызван пользовательский предикат, т.е. пользовательское определение «перекроет» предопределенное в SWI/PROLOG-е.

описывают связи между предикатами.

Билл любит все, что любит Том.

в синтаксисе Пролога

Правило B:-A соответствует импликации A→B («ЕСЛИ A, ТО B»).

В общем виде правило — это конструкция вида:

которая читается «P0 истинно, если P1 и P2 и. Pn истинны».

Предикат P0 называется заголовком правила, выражение P1,P2,…,Pn — телом правила, а предикаты Pi — подцелями правила. Запятая означает логическое » И «.

Факты и правила называются также утверждениями или клозами. Факт можно рассматривать как правило, имеющее заголовок и пустое тело.

— это совокупность утверждений, заголовки которых имеют одинаковый функтор и одну и ту же арность. Процедура задает определение предиката.

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

— поименованная область памяти, где может храниться значение.

Если переменная не связана со значением – она называется свободной переменной.

— процесс получения свободной переменной значения в результате сопоставления при логическом выводе в SWI/PROLOG-е.

Понятие переменной в логическом программировании отличается от базового понятия переменной, которое вводится в структурном программировании. Прежде всего, это отличие заключается в том, что переменная в SWI/PROLOG-е, однажды получив свое значение при унификации в процессе работы программы, не может его изменить, т.е. она скорее является аналогом математического понятия «переменная» – неизвестная величина. Переменная в SWI/PROLOG не имеет предопределенного типа данных и может быть связана с значением любого типа данных.

Переменная в SWI/PROLOG обозначается как последовательность латинских букв, кириллицы и цифр, начинающаяся с заглавной буквы или символа подчеркивания (_). Заметим, что если значение аргумента предиката или его имя начинается с заглавной буквы, то оно пишется в апострофах (см. предыдущий пример).

В SWI/PROLOG различаются строчные и заглавные буквы.

Рассмотрим следующую программу на SWI/PROLOG, которую будем использовать для иллюстрации процессов создания, выполнения и редактирования Пролог-программ.

ПРОГРАММА 1. /* кто что любит */

любит(‘Эллен’,теннис). %Эллен любит теннис

любит(‘Джон’,футбол). %Джон любит футбол

любит(‘Том’,бейсбол). %Том любит бейсбол

любит(‘Эрик’,плавание). %Эрик любит плавание

любит(‘Марк’,теннис). %Марк любит теннис

любит(‘Билл’,X):-любит(‘Том’,X). %Билл любит то, что любит Том

Комментарий в строке программы начинается с символа % и заканчивается концом строки. Блок комментариев выделяется специальными скобками: /* (начало) и */ (конец).

ЗАДАНИЕ 1.1

Для того чтобы набрать текст программы воспользуйтесь встроенным текстовым редактором. Чтобы создать новый файл выберете команду File/New, в диалоговом окне укажите имя нового файла, например, тест. Для редактирования уже созданного файла с использованием встроенного редактора можно воспользоваться командой меню File/Edit. Набейте программу 1 (текст программы выше по тексту) и сохраните ее (File/Save buffer).

Внешний вид редактора

Красным цветом подсвечиваются предикаты в заголовках предложений, которые с точки зрения синтаксиса SWI/PROLOGа корректны. Указатель “курсор” можно использовать для выверки (например, корректности) расстановки скобок. Зелёным цветом выделяются комментарии,темно-красным цветом — переменные. Подчеркиванием выделяются предикаты в теле правила, которые совпадают с предикатом заголовка,- таким образом акцентируется внимание на возможном зацикливании программы.

Читайте также:
Гис системы управления и программного обеспечения пакеты программ это

Чтобы запустить программу, сначала необходимо ее загрузить в SWI/PROLOG для выполнения. Это делается выбором опции Compile/Compile buffer из окна редактора. Результат компиляции отображается в окне интерпретатора SWI/PROLOGа. Там же указываются ошибки, возникшие при компиляции, чаще всего они отображаются и во всплывающем окне ошибок. Обычно перед компиляцией предлагается сохранить файл.

Другой способ загрузить уже существующий файл – это выполнение команды Consult в подменю File диалогового окна SWI/PROLOG. На экране появится диалоговое окно.

Укажите имя файла, который вы хотите загрузить, и выберите Открыть. Если вы попытаетесь загрузить для выполнения файл, в котором есть синтаксические ошибки, то он не загрузится, а вы получите сообщение об ошибке в главном окне. Угловые скобки > будут выделять место, где встретилась ошибка. По умолчанию файлы, ассоциируемые с SWI/PROLOG имеют расширение.pl.

Файлы также можно загрузить, используя встроенный предикат:

consult (Имя файла или имена нескольких файлов).

consult(Test). % test – имя файла

consult([Test1,Test2]). % Загрузка двух файлов.

consult(‘test.pl’). [1]

Для выполнения загрузки этот предикат нужно написать в главном окне после приглашения интерпретатора (?-), которое означает, что интерпретатор ждет запрос.

— это конструкция вида:

которая читается «Верно ли P1 и P2 и. Pn?». Предикаты Pi называются подцелями запроса.

Запрос является способом запуска механизма логического вывода, т.е фактически запускает Пролог-программу.

Для просмотра предложений загруженной базы знаний можно использовать встроенный предикат listing.

Проверьте загрузку исходного файла, задайте запрос

?-любит(‘Билл’,бейсбол). % Любит ли Билл бейсбол?

Получите ответ yes (да) и новое приглашение к запросу.

Введите следующие запросы и посмотрите на результаты.

?-любит(‘Билл’, теннис). %Любит ли Билл теннис?

?-любит(Кто, теннис). %Кто любит теннис?

?-любит(‘Марк’,Что),любит(‘Эллен’,Что).%Что любят Марк и Эллен?

?-любит(Кто, Что). %Кто что любит?

?-любит(Кто, _). %Кто любит?

При поиске решений в базе Пролога выдается первое решение.

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

Если необходимо прервать выполнение запроса, (например, нужно набрать другой запрос), используйте клавишу b.

Если Вы хотите повторить один из предыдущих запросов, воспользуйтесь клавишами «стрелка вверх» или «стрелка вниз».

Перезагрузить, измененные во внешнем редакторе, файлы можно, используя встроенный предикат make. Например так:

Перезагружаются все измененные файлы и файл начальной инициализации pl.ini; о его назначении будет оговорено позднее.

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ПРЕДИКАТОВ

В интерпретаторе SWI/PROLOG имеются, как было отмечено выше, множество встроенных предикатов. Опишем некоторые из них:

– загрузка одного или нескольких файлов.

?- consult(test). test – имя файла

– показывает текущий рабочий каталог.

– перезагрузить все измененные файлы (*.pl). В том числе и pl.ini. Аналог consult. Удобна при редактировании файлов во внешнем редакторе.

– смена рабочего каталога, где X – текущий рабочий каталог, Y – новый рабочий каталог.

– просмотр списка файлов в текущем рабочем каталоге.

ЗАДАНИЕ 1.2

Переведите предложения русского языка в предикатную форму, создайте, сохраните и загрузите базу знаний.

Эллен любит чтение.

Марк любит компьютеры.

Джон любит бадминтон.

Эрик любит чтение.

Бадминтон — это вид спорта.

Теннис — это вид спорта.

Футбол — это вид спорта.

Бейсбол — это вид спорта

Спортсмен — это тот, кто любит какой-нибудь вид спорта.

Объедините эту базу с базой из Задания 1.1.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru