Как сообщить Prolog/CLPFD только определенное количество доменов только в качестве последнего ресурса?Ограничение домена Prolog
E.g. : домен от 0 ... 8. Я хочу, чтобы Prolog использовал 0, только если нет другого варианта. Я использовал параметр «вниз» для маркировки, но назначено слишком много 0.
Context: Hoo-Doo game -> Generate 8x8 board solution, где любой столбец, строка или диагональ имеют номера от 1 до 8 без повторения (подобный Sudoku). Для завершения решения необходимо использовать две прозрачные части (представленные 0, которые могут быть где угодно).
Вот код:
...
setDomain(H,BoardSize),
maplist(all_distinct,H),
IndexI is BoardSize - 1,
IndexJ is BoardSize - 2,
checkDiagonalsLR(H,IndexI,IndexJ,BoardSize), %calls the all_distinct
IndexJ2 is BoardSize - 1,
checkDiagonalsRL(H,1,IndexJ2,BoardSize), %calls the all_distinct
transpose(H,Columns), maplist(all_distinct,Columns),
useLabeling(Columns,BoardSize), printBoard(Columns).
useLabeling([],N).
useLabeling([H|T],N) :- labeling([down],H), useLabeling(T,N).
Пожалуйста, добавьте свой код к вопросу. –
Только что добавленный код – user2884323