2013-05-06 8 views
3

Я пытаюсь добавить ограничение global_cardinality к моей программе и в manual of SICStus Prolog написано:Как добавить переменную домена в global_cardinality?

global_cardinality (+ Xs + Vals)

global_cardinality (+ Xs + Vals, + Options)

где Xs = [X1, ..., Xd] - это список целых чисел или переменных домена, а Vals = [K1-V1, ..., Kn-Vn] - это список пар, в которых каждый ключ Ki - единственное целое число , а Vi - переменная домена или целое число. Истинно, если каждый элемент Xs равен некоторому ключу, и для каждой пары Ki-Vi, точно Vi-элементы Xs равны Ki.

Теперь я могу написать:

global_cardinality([A,B,C], [1-2, 2-1]). 

сказать, что число 1 будет использоваться дважды. Номер 2 будет использоваться только один раз.

Но я хотел бы сказать, что число 1 будет использоваться: once, twice or three times

Согласно инструкции я нужна переменная домена, но что такое правильный синтаксис для этого?

ответ

1

не уверен в этом, но из SWI-Prolog page Я думаю, вы могли бы попробовать

...global_cardinality([A,B,C], [1-X, 2-1]), (X #= 1 #\/ X #= 2 #\/ X #= 2)... 

или

?- global_cardinality([A,B,C], [1-X, 2-1]), X in 1..3, label([A,B,C]). 
A = B, B = 1, 
C = X, X = 2 ; 
A = C, C = 1, 
B = X, X = 2 ; 
A = X, X = 2, 
B = C, C = 1. 
+0

Спасибо. Он работает одинаково. Моя способность отвечать на запросы Google для SICStus Prolog настолько плоха, что последуют аналогичные фиктивные вопросы :( –

+0

Есть ли чат с людьми, заинтересованными в Prolog? Я пробовал IRC-канал ## Prolog на Freenode, и он малоактивен. –

+0

Извините, но я не знаю, но Prolog это немного из моды, или лучше, было слишком жарко много лет назад. Тогда я думаю, что маловероятно, что вы можете поговорить об этом. – CapelliC

5
?- X in 1..3, global_cardinality([A,B,C], [1-X, 2-1]). 

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

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