如何在 Sicstus Prolog 的 CSP 中设置对变量的域

How to set domain of pair variable in CSP in Sicstus Prolog

我正在使用 Sicstus Prolog,我正在尝试解决 Domino 难题。

我有一个包含三元组的列表,我需要为其设置域。我知道如何设置单个变量或单个变量列表的域,但是如果我的列表有三元组,并且三元组的每个元素都有不同的域,我该怎么办?

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)

如何在不必明确说明每个变量的情况下执行此操作?

描述一个元素的域:

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), ...