我正在尝试使用 CLPFD 为 End View Puzzles 编写求解器(对于那些不熟悉的人,这里有一个简单的描述http://www.funwithpuzzles.com/2009/12/abcd-end-view-a1.html) . 我正在研究将应用于每一行/列的约束,并遇到了一些麻烦。
所以我认为它应该看起来像这样:
% NxN board, numbers from 0 to M in the row, Left/Right are the clues
% corresponding to the row
endviews(N,M,List,Left,Right):-
length(List,M),
domain(List,0,M),
stop_repeats(List,M),
left_value(List,M,Left),
reverse(List,RList),
left_value(RList,M,Right)
.
所以前三个步骤非常简单:初始化板,设置域,并确保该行不会重复除0
(我已经写了stop_repeats/2
谓词)以外的数字。我遇到的问题是处理left_value/3
谓词;我不太确定如何在这里进行,因为列表中的大部分内容都不受限制,而且我实际上并不知道第一个积极元素的位置。任何帮助将不胜感激!