Пролог Арифметика плюс

Я наткнулся на довольно странную проблему (для меня).

Очень просто, я хочу добавить между двумя целыми числами. Я использую предложение plus из переключить

Теперь, когда я делаю это (я вычисляю что-то на графике)

plus(LatestTime,LengthPath,TimeArrive),

Переменная TimeArrive — это физический адрес вместо ответа. Теперь я попытался сделать другой пункт

myPlus(Var1,Var2,Result):-
    Result is Var1 + Var2.

И вот то же самое, поэтому я начинаю верить, что что-то не так с моими двумя входными переменными

LatestTime,LengthPath

Однако, когда я их «пишу», я получаю целое число вместо физического адреса.

Любые подсказки? Потому что у меня нет идей :)


person Christophe    schedule 10.01.2012    source источник
comment
Я исправил это, заменив плюс на TimeArrive is LatestTime + LengthPath. Но все же я понятия не имею, почему Prolog дал мне физический адрес вместо целого числа.   -  person Christophe    schedule 11.01.2012
comment
Немного сложно догадаться, что происходит, без остального кода; Я предполагаю, что задействована структура if или какие-то побочные эффекты, хотя я не вижу, как это исправила замена myPlus/3.   -  person Thanos Tintinidis    schedule 11.01.2012
comment
Что вы подразумеваете под физическим адресом?   -  person Fred Foo    schedule 11.01.2012
comment
Я подозреваю, что вы видите не физический адрес, а результат запроса значения несвязанной (свободной) переменной. Конечно, вы на самом деле написали в вопросе, что я получаю целое число вместо физического адреса. Это усугубляет путаницу в отношении того, чего вы хотите и что вы делаете, чтобы попытаться это сделать.   -  person hardmath    schedule 12.01.2012
comment
Если это воспроизводимый файл, то ошибка: swi-prolog.org/Mailinglist.html   -  person Mostowski Collapse    schedule 14.01.2012
comment
Может быть, вы можете рассказать нам, как вы вычисляете обе входные переменные LatestTime и LengthPath. Я думаю, это было бы полезно.   -  person blacklwhite    schedule 27.01.2012


Ответы (1)


Используйте clpfd для выражения отношений между целочисленными значениями, когда это возможно!

В общем, я думаю, что лучше всего использовать clpfd для всех целочисленных вычислений вместо "старой простой арифметики Пролога через (is)/2 --- не только тех, которые вы считаете "обратимыми".

person repeat    schedule 19.08.2015