如何在 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), ...
我正在使用 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), ...