我正在使用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)
如何在不必明确说明每个变量的情况下执行此操作?
答案 0 :(得分:3)
描述一个元素的域名:
eldoms(R-C-D) :-
domain(R, 1, 4),
domain(C, 1, 4),
domain(D, 0, 1).
和
..., maplist(eldoms, RCDs), ...
或者,使用library(lambda)
:
..., maplist(
\ (R-C-D) ^ ( domain(R, 1, 4),
domain(C, 1, 4),
domain(D, 0, 1) ), RCDs), ...