2013-05-09 5 views
3

можно указать домен переменной таким образом:Возможно ли установить домен переменной как перечисление имен в clpfd?

MyVar in 1..10 

или

MyVar in {1,10,15} 

, но у меня есть переменная, которую я хотел бы уточнить, как это:

Activity_1__room in {room_1, room_2} % i.e. as atoms not as integers 

Можно сделать это? Конечно, можно кодировать имена целыми числами, но действительно ли это необходимо?

+0

Зачем вам clpfd для управления этой переменной для вас, а не просто что-то вроде 'room (room_1). Номер (room_2). ... room (Activity), 'как обычно, при программировании Prolog? Вы все равно не можете делать арифметику на 'Activity_1__room'. –

+0

Ну, я хочу использовать 'labeling', и я не вижу, как использовать ваш код в предикате маркировки. Возможно, это очевидно, но мои знания clpfd очень ограничены. Я не понимаю, какова граница между прологом и библиотекой clpfd (т. Е. Как они внутренне работают вместе). –

+0

Я не думаю, что есть какая-то причина использовать маркировку для нечисловых значений. Если вы делаете факт для обеих комнат, как я делал выше, а затем используйте 'room (ActivityRoom)', тогда обычные средства возврата назад будут пытаться поочередно, пока не найдут правильный. Я подозреваю, что вам не хватает понимания о том, как работает Prolog, что вам нужно будет решить, чтобы сделать какой-либо реальный прогресс. –

ответ

7

Вы не можете использовать атомы. Домены в CLPFD располагаются над целыми числами.

Но предположим, что вы хотите сказать, что «MyVar должен принимать одно из значений списка L», то есть множество неизвестно априори. Это может быть кодировано как:

?- list_to_fdset(L, Set), 
    MyVar in_set Set. 

 Смежные вопросы

  • Нет связанных вопросов^_^