Почему пролог не дает правильное значение для переменной? - PullRequest
0 голосов
/ 28 ноября 2018

Я пишу основную программу на прологе, но у меня не получается.Это код:

Мой код пролога.

borders(sweden,finland,586).
borders(norway,sweden,1619).

allborders(X,Y,L) :- borders(X,Y,L).
allborders(X,Y,L) :- borders(Y,X,L).
addborders(C,Lsum,Set) :- length(Set,0), write(C), write(' - '), write(Lsum), C == Lsum.
addborders(C,Lsum,[H|T]) :- Lsum2 is Lsum + H, addborders(C,Lsum2,T).
helpsetofpredicate(Country,L) :- allborders(Country,_,L).
circumference(C,Country) :- setof(L,helpsetofpredicate(Country,L),Set), addborders(C,0,Set).

(Obs: границы - это всего лишь небольшой пример для гигантского файла, но их достаточно для описания проблемы)

Таким образом, эта программа должна суммировать все границы со страной и проверить, является ли данная окружность (C) суммой окружности страны (Страна).Если бы я набрал

circumference(2205,sweden).

, программа выдаст true, что и ожидается.Но если я наберу

circumference(C,sweden).

, программа выдаст false.Я поместил некоторые записи в коде, чтобы увидеть, какие значения имеют C и Lsum, и вывод равен _G962 - 2205. Почему пролог не присваивает C правильное значение вместо того, чтобы присвоить ему случайное значение?

1 Ответ

0 голосов
/ 28 ноября 2018

Мой Пролог немного ржавый, но если вы измените C == Lsum на C = Lsum (в вашем первом предикате addborders), он работает.

Так как в вашем предикате он оценивает C ==Lsum и это не так.Но с одним '=' Пролог пытается сопоставить его, и это возможно, если C равен 2205.

См. Также https://stackoverflow.com/a/8220315/5609233 для разницы '=' и '=='.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...