我正在尝试解决由此组成的类的问题:
在每个桶的一侧填充白色单元格,数字从1到6不等。数字不能 在每个水平和垂直方向重复。桶顶上的每个数字必须 等于桶中四个不同数字的总和或乘积。所有热门号码 是不同的,不到91。
我可以很好地达到结果,但我需要显示桶的结果,当我运行我的基础案例时,它会显示:
[_24087,18,60,17,_24343,72,_24471,_24535,14]
[1,2,3,4,5,6,3,4,5,6,1,2,2,5,1,3,6,4,4,6,2,5,3,1,5,1,6,2,4,3,6,3,4,1,2,5]
Result achieved in 0.015 sec.
Resumptions: 6197
Entailments: 1306
Prunings: 3520
Backtracks: 62
Constraints created: 107
第一个列表是矩阵和Matrix标记的第二个列表。
为了计算桶我在规则上使用它:
getlist(Matrix,CounterX,CounterY,InnerSize,Value), % gets the barrel sublist
all_distinct(Value),
sum(Value, #=, SSet), % sum
prod(Value, VSet), % product
Set #= SSet #\/ Set #= VSet, % chooses one
Set #=< MaxValue,
insertinto(Set, List, NewList), % inserts into the barrel list
由于SICStus没有产品计算规则,我创建了这个规则:
prod([H|T], R) :-
prod(T, H, R).
prod([], R, R).
prod([H|T], V, R) :-
NV #= H * V,
prod(T, NV, R).
我不明白问题究竟在哪里。