編集:私がばかである理由については、以下の私の答えを参照してください。これにはまだ答えたいなぞなぞがあります。
私はこれにあまりにも長い間立ち往生してきました。見栄えの良いグリッドで数独ソリューションを印刷しようとしています。
Prolog でパターン マッチングがどのように機能するかの重要な部分を理解していないため、問題が発生していると思います。
さらに苦労せずに、私のコード:
prettier_print([]).
prettier_print([Puzzle]) :- prettier_print(0, [Puzzle]).
prettier_print(0, Puzzle) :-
writeln('┌───────┬───────┬───────┐'),
prettier_print(1, Puzzle).
prettier_print(4, Puzzle) :-
writeln('│───────┼───────┼───────│'),
prettier_print(5, Puzzle).
prettier_print(8, Puzzle) :-
writeln('│───────┼───────┼───────│'),
prettier_print(9, Puzzle).
prettier_print(12, []) :-
writeln('└───────┴───────┴───────┘').
prettier_print(N, [Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9 | Puzzle]) :-
member(N, [1,2,3,5,6,7,9,10,11]), % tried this when the line below did not work
% N =\= 0, N =\= 4, N =\= 8, N =\= 13,
format('│ ~d ~d ~d │ ~d ~d ~d │ ~d ~d ~d │~n', [Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9]),
succ(N, N1),
prettier_print(N1, Puzzle).
呼び出しは次のとおりです。
prettier_print(0, [1,2,3,4,5,6,7,8,9,
2,2,3,4,5,6,7,8,9,
3,2,3,4,5,6,7,8,9,
4,2,3,4,5,6,7,8,9,
5,2,3,4,5,6,7,8,9,
6,2,3,4,5,6,7,8,9,
7,2,3,4,5,6,7,8,9,
8,2,3,4,5,6,7,8,9,
9,2,3,4,5,6,7,8,9]).
出力は次のとおりです。
┌───────┬───────┬───────┐
│ 1 2 3 │ 4 5 6 │ 7 8 9 │
│ 2 2 3 │ 4 5 6 │ 7 8 9 │
│ 3 2 3 │ 4 5 6 │ 7 8 9 │
│───────┼───────┼───────│
│ 4 2 3 │ 4 5 6 │ 7 8 9 │
│ 5 2 3 │ 4 5 6 │ 7 8 9 │
│ 6 2 3 │ 4 5 6 │ 7 8 9 │
│───────┼───────┼───────│
│ 7 2 3 │ 4 5 6 │ 7 8 9 │
│ 8 2 3 │ 4 5 6 │ 7 8 9 │
│ 9 2 3 │ 4 5 6 │ 7 8 9 │
└───────┴───────┴───────┘
true ;
false.
問題は、true が返されないだけで、 を押す必要が;
あり、その後 false が返されることです。これは、私のprettier_print/1
ルールが正しく機能していないことを意味します。
私はこれが意味することを理解するのに十分知っていると思います:
Prolog は後戻りして、私のルールの別の解釈を試みています (私の用語を正しく理解していれば、統一できるものが他にないかどうかを調べます)。これはそれと統合する別のものを見つけますが、すぐに失敗します。そうですか?
可能な解釈は1つだけであってほしい。それを意味するように関数を修正するにはどうすればよいですか?
助けてくれてありがとう、これは私がそのようなばかのように感じています!