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)
.
したがって、最初の 3 つの手順は非常に簡単です。ボードを初期化し、ドメインを設定し、この行が (述語0
を書きました)以外の数字を繰り返さないことを確認します。stop_repeats/2
私が直面している問題は、left_value/3
述語の処理です。リストのほとんどは制約されておらず、この最初の正の要素の位置が実際にはわからないため、ここでどのように進めればよいかよくわかりません。どんな助けでも大歓迎です!