2016-12-16 3 views
1

Я использую Sicstus Prolog, и я пытаюсь решить Domino Puzzle.Как установить домен переменной пары в CSP в Sicstus Prolog

У меня есть список с триплетами, которые мне нужно установить в домене. Я знаю, как установить домен одной переменной или список отдельных переменных, но как я могу это сделать, если в моем списке есть триплеты, и каждый из элементов троек имеет другой домен?

DV = [R1-C1-D1, R2-C2-D2, ... , R15-C15-D15] 

То, что я хочу сделать это:

domain(R1, 1, 4) 
domain(C1, 1, 4) 
domain(D1, 0, 1) 
domain(R2, 1, 4) 
domain(C2, 1, 4) 
domain(D2, 0, 1) 
.... 
domain(R15, 1, 4) 
domain(C15, 1, 4) 
domain(D15, 0, 1) 

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

ответ

2

Описать доменов для одного элемента:

eldoms(R-C-D) :- 
    domain(R, 1, 4), 
    domain(C, 1, 4), 
    domain(D, 0, 1). 

И:

..., maplist(eldoms, RCDs), ... 

использованием library(maplist).

В качестве альтернативы, используя library(lambda):

..., maplist(
     \ (R-C-D)^( domain(R, 1, 4), 
         domain(C, 1, 4), 
         domain(D, 0, 1)), RCDs), ... 
+0

Эй! Я пытаюсь реализовать Domino Puzzle в прокси (sicstus) (используя только логику ограничений). Я нашел довольно подробное руководство, объясняющее логику, но у меня проблемы с ее реализацией. Мне было интересно, не могли бы вы мне помочь, пожалуйста? – Tirafesi

+0

[This] (http://www.hakank.org/sicstus/) может заинтересовать вас! – false