2016-12-16 47 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