【问题标题】:Replace element in list of list that contains list in Prolog [duplicate]替换包含Prolog中列表的列表列表中的元素[重复]
【发布时间】:2018-04-15 04:54:28
【问题描述】:

我已经进行了一些搜索并尝试了许多我在 stackoverflow 的一些问题中看到的附加内容,但我无法解决我的问题...

差不多就是这个问题,但我里面还有一个列表:

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]]
]

我需要一种方法来用一个新列表替换一个包含数字的列表,并返回替换值的所有矩阵。 replace 方法接收行号和列(位置)号以及位置的新值。

有人知道怎么做吗?

编辑:

内部列表包含 1-5 个元素。输入是:矩阵、行、单元格、新值。主要目标是在行的单元格上返回一个带有 newValue 的新矩阵。

示例:

我想将我的第 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]。

【问题讨论】:

  • 我编辑了最初的帖子。很抱歉没有发布示例
  • 列表的元素是什么并不重要。它可以是一个原子、一个列表、一个复合词。一个元素就是一个元素。因此,这与您链接的完全相同。请向我们展示您尝试过的代码。它应该按原样工作。

标签: list matrix replace prolog elements


【解决方案1】:

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]]

【讨论】:

  • 非常感谢!!好简单的方法:)
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 2013-03-21
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多