Как реализовать предикаты и предложения классов в Visual Prolog? - PullRequest
0 голосов
/ 01 ноября 2019

Случай, который я пытаюсь рассмотреть, - это программа, написанная на Прологе 9. Идея очень проста: давайте введем список пар "город - страна", некоторые пары также в виде "страна - континент". ,Я до сих пор:

clauses
   city_country("London", "UK").
   city_country("St.Petersburg", "Russia").
   city_country("Kyiv", "Ukraine").
   city_country("Beijing", "China").
   city_country("Warsaw", "Poland").
   country_continent("Poland", "Europe").
   country_continent("Russia", "Europe").

Мне нужно узнать, относятся ли определенные города (например, «Санкт-Петербург») к «Европе» или нет, в зависимости от логических положений (это учебное упражнение),Мой код:

% Copyright

implement one
    open core

class facts - geoDB
city : string.
country : string.
continent : string.

class predicates
    city_country : (string City, string Country).
    city_continent : (string City, string Continent).

clauses
    city_country(City, Country) :-
    city_continent(City, Continent).

class predicates
    reconsult : (string FileName).

clauses
reconsult(FileName) :-
    retractFactDB(geoDB),
    file::consult(FileName, geoDB).

clauses
run() :-
    console::init(),
    stdIO::write("Load data\n"),
    reconsult("fa.txt"),
    stdIO::write("\nEvaluating city/continent relations..\n"),
    Y = "Europe",
    city_country(X, Y),
    stdIO::writef("% is a land in %\n", X, Y),
    fail.
run() :-
    stdIO::write("End of test\n").

end implement one

goal
    mainExe::run(one::run).

Все пункты выше этого кода (т.е. city_country ("London", "UK") и т. Д.) Сохраняются в файле с именем "fa.txt".

Однажды создавая этот проект, я застрял в ошибке «Нет предложений для предиката city_continent / 2 в классе one». Нажав «Исправить», я сталкиваюсь со следующим недостатком: «Шаблон потока (i, o)» не существует для «one :: city_continent / 2» ».

Я новичок в ПрологеЕстественно, мой код содержит некоторые неровности, которые я не могу понять. Надеюсь, вы бы посоветовали мне, что не так решать.

...