Как установить домен парной переменной в 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), ...
Другие вопросы по тегам