2016-12-16 48 views
1

我正在使用Sicstus Prolog,並試圖解決Domino拼圖問題。如何在Sicstus Prolog中的CSP中設置對變量的域

我有一個三胞胎列表,我需要設置的域名。我知道如何設置單個變量的域或單個變量的列表,但是如果我的列表具有三元組,並且三元組中的每個元素都有不同的域,我該如何做?

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

嘿!我試圖在(sicstus)prolog中實現Domino Puzzle(只使用約束邏輯)。我發現了一個非常詳細的指導來解釋邏輯,但是我實際上很難實現它。我想知道你能幫助我嗎? – Tirafesi

+0

[This](http://www.hakank.org/sicstus/)可能會對你感興趣! – false