Я использую пролог, чтобы попытаться решить головоломку kakuro. У меня есть список правил, как это, где R и С представляют собой строку и начальную точку каждой коробки, L представляет собой длину, и S представляет собой сумму чисел в строке,Решение головоломки в прологе - создание решения с ограничениями?
% across(R, C, L, S)
across(2,4,2,4).
across(2,10,2,4).
across(3,4,4,12).
across(3,10,2,6).
across(4,3,2,6).
Насколько я может сказать, чтобы решить головоломку через использование ограничений, для каждого элемента L мне пришлось бы найти разные числа между 1 и 9, которые при добавлении равны S. Я действительно изо всех сил пытаюсь это понять, код, который у меня есть до сих пор это:
solveAcross(Solution) :-
findall([R,C,L,S], across(R,C,L,S), List),
Solution = length(List, L),
Solution ins 1..9,
all_distinct(Solution),
labeling([], Solution).
Но все это делает, возвращает false.
Любая помощь будет оценена по достоинству.
Что означает 'Solution = length (List, L)' и 'Solution = 1..9'? – lurker
Рассмотрите только соединение двух целей: «Решение = длина (список, L)» и «решение = 1..9», которые ** оба ** встречаются в вашей программе. Очевидно, что этот контур уже будет ** терпеть неудачу **, потому что '1..9' и' length (List, L) 'не объединяются. – mat
@ lurker, извините, что должно было быть решением 1..9, что означает, что сгенерированные решения должны быть между 1 и 9. Решение = длина (список, L) Я думал, что сделает пустой список длины L, но набрав это, на самом деле, похоже, не то, что я хочу делать для достижения своей цели. – AgarAgar