Случай, который я пытаюсь рассмотреть, - это программа, написанная на Прологе 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» ».
Я новичок в ПрологеЕстественно, мой код содержит некоторые неровности, которые я не могу понять. Надеюсь, вы бы посоветовали мне, что не так решать.