4

リストに変数を自動的に入力する方法は?

お気に入り

for(i=1;i<=9,i++){
    addtoanylist(X_i);
}

結果は L=[X1,X2,X3,X4,X5,X6,X7,X8,X9] のようになります。?

それは、sudokusolver 用に適切なサイズのリストを作成したいからです。

ここでサイズを取得します:

sudoku_size_check(L) :-
    len(L,N),
    member(N,[4,9,16,25]), %check if its 4x4,9x9..
    write('Listlength: '),
    write(N),nl,
    range(1,N,RangeList), %generate [1,2,3,4] in 4x4, [1..9] in 9x9..
    write('Possible numbers: '),
    write(RangeList), % in 4x4 its like [1,2,3,4]
    nl,
    retract(sudoku_settings(_,_)),
    assert(sudoku_settings(N,RangeList)). %write stats into global variable
4

1 に答える 1

9

「長さ」述語を逆に適用することで、自由変数でリストを埋めることができます。

length(L, 9).

これによりL = [_G320, _G323, _G326, _G329, _G332, _G335, _G338, _G341, _G344]、後でバインドされる可能性のある 9 つの自由変数のリストが生成されます。

これは、「長さ」という述語としては珍しいことですが、宣言的に読むと、「length(L, 9)」は次Lのようになります。「長さ 9 の任意のリストです。」それはまさにあなたが望むものです.9つの自由変数のリストは、その定義の最も一般的なケースに適合します.

于 2011-06-03T09:19:53.190 に答える