prolog使用循环中的变量自动填充列表

时间:2011-06-03 09:02:52

标签: list variables prolog sudoku

如何使用变量自动填充列表?

喜欢

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

1 个答案:

答案 0 :(得分:9)

您可以通过反向应用“length”谓词来填充带有自由变量的列表:

length(L, 9).

这导致L = [_G320, _G323, _G326, _G329, _G332, _G335, _G338, _G341, _G344] - 一个包含九个自由变量的列表,这些变量可能会在以后被绑定。

对于名为“length”的谓词,这是不常见的,但如果您以声明方式阅读它,“length(L, 9)”说:“L是任何长度为9的列表。”这正是你想要的 - 一个包含9个自由变量的列表符合该定义的最常见情况。