Вывод пролога на Mac

У меня проблема с использованием пролога на Mac, я понял, как запустить его с помощью SWI-Prolog, но когда я запускаю его, он выдает ошибку и не дает ожидаемого результата

Ожидаемый результат: Гомер, Барт

male(homer).
male(bart).
female(marge).
female(lisa).
female(maggie).

parent(homer, bart).
parent(homer, lisa).
parent(homer, maggie).
parent(marge, bart).
parent(marge, lisa).
parent(marge, maggie).

mother(X, Y) :- parent(X, Y), female(X).
father(X, Y) :- parent(X, Y), male(X).
son(X, Y) :- parent(Y, X), male(X).
daughter(X, Y) :- parent(Y, X), female(X).

?- male(X).

Вот ошибка, о которой я говорил ранее

Warning: /Users/[username]/Desktop/simpsons.pl:19:
Warning:    Singleton variables: [X]
true.

И вместо вывода homer, bart выводится true


person CBotella    schedule 21.10.2020    source источник
comment
Вам нужно ввести male(X). интерактивно.   -  person false    schedule 21.10.2020
comment
@false, разве это не сделано? ?- male(X).   -  person CBotella    schedule 21.10.2020
comment
?- - это приглашение верхнего уровня. И вы набираете male(X).   -  person false    schedule 21.10.2020
comment
@false вот так: male(homer). male(bart). female(marge). female(lisa). female(maggie). parent(homer, bart). parent(homer, lisa). parent(homer, maggie). parent(marge, bart). parent(marge, lisa). parent(marge, maggie). mother(X, Y) :- parent(X, Y), female(X). father(X, Y) :- parent(X, Y), male(X). son(X, Y) :- parent(Y, X), male(X). daughter(X, Y) :- parent(Y, X), female(X). male(X).?   -  person CBotella    schedule 21.10.2020
comment
Вы компилируете остальное (как и раньше), а затем загружаете и задаете запрос.   -  person false    schedule 21.10.2020


Ответы (1)


При программировании на Prolog вы помещаете определения и запросы в разные места. Определения входят в исходные файлы. Запросы не входят в исходные файлы. Вы вводите их во время взаимодействия с системой Prolog в так называемом верхнем уровне, или приглашении, или оболочке, или, возможно, REPL (цикл чтение-оценка-печать).

Например, это определения:

male(homer).
male(bart).
female(marge).
female(lisa).
female(maggie).

Вы поместили их в исходный файл с именем simpsons.pl. Это верно.

Это не определение, а запрос:

?- male(X).

Это не входит в исходный файл. Не вставляйте его в simpsons.pl. Скорее вы:

  1. запустите вашу систему Prolog
  2. загрузить файл simpsons.pl как-нибудь
  3. введите запрос male(X). и наблюдайте за ответами

Это видео: https://www.youtube.com/watch?v=t6L7O7KiE-Q показывает эти шаги с SWI-Prolog на Mac.

Если вам удобно использовать командную строку, возможно, вы сможете сделать это проще. Например, на моем компьютере (Linux) я могу запустить SWI-Prolog с аргументом командной строки, указывающим имя файла для загрузки:

$ swipl simpsons.pl 
Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?-

Видишь это ?-? Это приглашение означает, что верхний уровень теперь ожидает вашего ввода. Здесь вы вводите свой male(X) запрос. Вы можете использовать ; или Space для циклического перехода между различными ответами:

?- male(X).
X = homer ;
X = bart.
person Isabelle Newbie    schedule 21.10.2020
comment
Кстати, откуда взялась эта окраска? - person false; 21.10.2020
comment
StackOverflow недавно изменился на новую интеллектуальную подсветку синтаксиса, которая думает, что все это JavaScript или что-то в этом роде. Он автоматически окрашивает блоки кода (т. Е. Обычные блоки с отступом в четыре пробела) без каких-либо действий. И без предоставления простого способа его выключить, насколько я могу судить. - person Isabelle Newbie; 21.10.2020