私は、グリッドがあるように説明できる ntiles 問題を解決しようとしています。次に、指定されたサイズの N 個のタイルをグリッドに配置します。次のようなルールがあります。
ntiles(A/B, Grid, N, Pos1/Pos2) :-
そして、タイルを見つけることができる可能な位置を返す必要があります:
>ntiles(2/1,3,2,P).
P=[1/1,1/3]?;
P=[1/1,2/3]?;
P=[2/1,1/3]?;
P=[2/1,2/3]?;
No.
単純な再帰問題だと思いますが、なんとか解決できませんでした。最初に、位置 1/1 から始まる 1 行にのみタイルを配置しようとしました。これは、私が今のところ最前列にとどまっていることを意味します。これが実現できれば、カラムに実装しやすいと思いました。
私のコードをチェックすると、あなたは私を理解するでしょう:
ntiles(A/B, G, N, K) :-
setof(X/Y, horizontal(A/B, G, N, X/Y), K).
horizontal(A/B, G, N, P1/P2) :-
N > 0,
P is A + 2,
P =< G,
horizontal(A/B, G, N-1, P/1).
このコードは「false」を返します。Kのリストが返ってくると思っていたのですが、どこに問題があるか分かりますか?
また、この問題を解決するための洞察を教えてもらえますか?
前もって感謝します。