Как установить домен парной переменной в CSP в 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)
Как я могу сделать это без необходимости явно указывать каждую переменную?
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), ...