替换包含 Prolog 中列表的列表列表中的元素
Replace element in list of list that contains list in Prolog
我做了一些搜索并尝试了很多我在Whosebug的一些问题中看到的附加,但我无法解决我的问题...
差不多就是这个问题,但我里面还有一个列表:
Replacing elements in list of lists PROLOG
我的矩阵:
[
[[-1], [-1], [-1], [4], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
]
我需要一种方法来用一个新列表替换一个包含数字的列表,并return用替换的值对所有矩阵进行运算。
方法 replace 接收行号和列(位置)号以及该位置的新值。
有人知道怎么做吗?
编辑:
内部列表包含 1-5 个元素。输入是:矩阵、行、单元格、新值。主要目标是return一个新的矩阵,在行的单元格上有新的值。
示例:
我想将第 1 行和第 4 单元格设置为值:[1,2,3]。
所以输出矩阵将是:
[
[[-1], [-1], [-1], [1,2,3], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
]
因此该方法将列表 [4] 替换为列表 [1,2,3]。
SWI-Prolog 有一个 builtin 可以帮助:
test :- I=[ [[-1], [-1], [-1], [4], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
],
replace_row_col(I,1,4,[1,2,3],Upd),
maplist(writeln,Upd).
replace_nth(N,I,V,O) :-
nth1(N,I,_,T),
nth1(N,O,V,T).
replace_row_col(M,Row,Col,Cell,N) :-
nth1(Row,M,Old),
replace_nth(Col,Old,Cell,Upd),
replace_nth(Row,M,Upd,N).
产量
?- test.
[[-1],[-1],[-1],[1,2,3],[-1],[-1],[-1]]
[[-1],[0],[1],[0],[2],[-1]]
[[3],[4],[3],[1],[1],[2],[3]]
[[1],[5],[4],[2],[4],[3]]
[[2],[3],[4],[0],[4],[4],[1]]
[[2],[3],[1],[3],[0],[4]]
[[0],[1],[0],[3],[2],[1],[0]]
[[-1],[2],[2],[5],[0],[-1]]
[[-1],[-1],[-1],[4],[-1],[-1],[-1]]
我做了一些搜索并尝试了很多我在Whosebug的一些问题中看到的附加,但我无法解决我的问题...
差不多就是这个问题,但我里面还有一个列表:
Replacing elements in list of lists PROLOG
我的矩阵:
[
[[-1], [-1], [-1], [4], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
]
我需要一种方法来用一个新列表替换一个包含数字的列表,并return用替换的值对所有矩阵进行运算。 方法 replace 接收行号和列(位置)号以及该位置的新值。
有人知道怎么做吗?
编辑:
内部列表包含 1-5 个元素。输入是:矩阵、行、单元格、新值。主要目标是return一个新的矩阵,在行的单元格上有新的值。
示例:
我想将第 1 行和第 4 单元格设置为值:[1,2,3]。
所以输出矩阵将是:
[
[[-1], [-1], [-1], [1,2,3], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
]
因此该方法将列表 [4] 替换为列表 [1,2,3]。
SWI-Prolog 有一个 builtin 可以帮助:
test :- I=[ [[-1], [-1], [-1], [4], [-1], [-1], [-1]],
[[-1], [0], [1], [0], [2], [-1]],
[[3], [4], [3], [1], [1], [2], [3]],
[[1], [5], [4], [2], [4], [3]],
[[2], [3], [4], [0], [4], [4], [1]],
[[2], [3], [1], [3], [0], [4]],
[[0], [1], [0], [3], [2], [1], [0]],
[[-1], [2], [2], [5], [0], [-1]],
[[-1], [-1], [-1], [4], [-1], [-1], [-1]]
],
replace_row_col(I,1,4,[1,2,3],Upd),
maplist(writeln,Upd).
replace_nth(N,I,V,O) :-
nth1(N,I,_,T),
nth1(N,O,V,T).
replace_row_col(M,Row,Col,Cell,N) :-
nth1(Row,M,Old),
replace_nth(Col,Old,Cell,Upd),
replace_nth(Row,M,Upd,N).
产量
?- test.
[[-1],[-1],[-1],[1,2,3],[-1],[-1],[-1]]
[[-1],[0],[1],[0],[2],[-1]]
[[3],[4],[3],[1],[1],[2],[3]]
[[1],[5],[4],[2],[4],[3]]
[[2],[3],[4],[0],[4],[4],[1]]
[[2],[3],[1],[3],[0],[4]]
[[0],[1],[0],[3],[2],[1],[0]]
[[-1],[2],[2],[5],[0],[-1]]
[[-1],[-1],[-1],[4],[-1],[-1],[-1]]