2

我正在使用 Sicstus Prolog,并且正在尝试解决 Domino Puzzle。

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

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)

如何在不必明确说明每个变量的情况下做到这一点?

4

1 回答 1

3

描述一个元素的域:

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), ...
于 2016-12-16T13:31:31.147 回答