我正在尝试编写一个prolog程序,该程序可以找到2D数组中完全被b或w包围的图块。

例如,给定这样的数据集:

[
    [b, w, +, +],
    [w, +, w, b],
    [+, w, b, +],
    [+, +, +, b],
]


它将返回另一个包含以下内容的变量:

[
    [-, -, -, -],
    [-, w, -, -],
    [-, -, -, b],
    [-, -, -, -],
]


也就是说,它将所有被+完全包围的b替换为b,对于那些被w包围的-替换为。

谁能提供有关如何构建程序的想法?

最佳答案

这可能会有所帮助:它采用您提供的表示形式,并返回一个列表,该列表的元素均为[ColumnIndex,RowIndex,Value]形式。然后,您可以使用member在特定的行/列中查找元素。

encodearray( A, AA ) :- ( A, 0, 0, AA ).
encodearray( [], _, _, [] ).
encodearray( [[]|A], _, R, AA ) :- R1 is R+1, encodeArray( A, 0, R1, AA ).
encodearray( [[A|B]|X], C, R, [[C,R,A]|AA] ) :- C1 is C+1, encodeArray( [B|X], C1, R, AA ).

07-24 13:09