Некоторые из моих программ на Прологе может получить прибыль довольно немного, если я мог бы заменить все(is)/2
-А целочисленной арифметику их clpfd коллегой.SICStus Prolog 4.3.2: clpfd не получил питания?
Так что я хочу власть ... с clpfd ... так что я могу заменить X is 10^3
с чем-то clpfd-у :)
Рассмотрим следующие пять процессоров Prolog поддерживает clpfd:
GNU Prolog 1.4.4
?- X #= 10^3. uncaught exception: error(type_error(fd_evaluable,(^)/2),(#=)/2) ?- X #= 10**3. X = 1000.
SWI-Prolog 7.3.14
?- use_module(library(clpfd)). % autoload would be even more awesome true. ?- X #= 10^3. X = 1000. ?- X #= 10**3. ERROR: Domain error: `clpfd_expression' expected, found `10**3'
B-Prolog 8,1
?- X #= 10^3. X #= 10^3. *** error(illegal_array_access,10^3) ?- X #= 10**3. X = 1000.
SICStus Prolog 4.3.2
?- use_module(library(clpfd)). true. ?- X #= 10^3. ! Existence error in (^)/2 ! constraint user:wi(^)/2 does not exist ! goal: 10^3 ?- X #= 10**3. ! Existence error in user:(**)/2 ! constraint user:(**)/2 does not exist ! goal: 10**3
Идеи/советы/консультации, пожалуйста. Что мне делать? Используйте некоторые совместимые уровни (ы) clpfd, возможно?
Спасибо заранее!
Намного сложнее будет обрабатывать числовые различия в диапазоне! См., Например, Маркус Триска [тезисы] (http://www.metalevel.at/drt.pdf) – CapelliC
@CapelliC. Я не понял ... Что именно вы имеете в виду? Пожалуйста, укажите мне какую-нибудь страницу в тезисе мата ... Или вы можете ссылаться на одно из следующих ограничений? Как несколько решателей могут взаимодействовать изящно? Или как встроенные элементы вроде 'length/2' не могут обрабатывать FD vars, потому что реализация еще не догнала? – repeat
@CapelliC. Веселый X-mas, кстати! Восстание и блеск для господина приходят на Землю ... – repeat