在prolog中更新矩阵中的变量

在prolog中更新矩阵中的变量,prolog,Prolog,如何在prolog中更新矩阵中的元素 L=[[1,2,3],[4,5,6],[7,8,9]] nth0(1,L,Row). Row=[4,5,6] nth0(1,Row,8]. false ! 例如,您可以使用/4: update_mat_rc(Mc,R,C,V,Mu) :- nth0(R,Mc,Rc,Mt), nth0(C,Rc,_,Rt), nth0(C,Ru,V,Rt), nth0(R,Mu,Ru,Mt). ?- update_mat_rc([[1,2,

如何在prolog中更新矩阵中的元素

L=[[1,2,3],[4,5,6],[7,8,9]]
nth0(1,L,Row).
Row=[4,5,6]
nth0(1,Row,8].
false !
例如,您可以使用/4:

update_mat_rc(Mc,R,C,V,Mu) :-
    nth0(R,Mc,Rc,Mt),
    nth0(C,Rc,_,Rt),
    nth0(C,Ru,V,Rt),
    nth0(R,Mu,Ru,Mt).

?- update_mat_rc([[1,2,3],[4,5,6],[7,8,9]],1,1,x,M).
M = [[1, 2, 3], [4, x, 6], [7, 8, 9]].
注意传递给nth0/4的变量的顺序和命名


我在变量后面加了c(如
Mc
Rc
)表示当前,t表示临时,u表示更新。

在序言中,变量很少“更新”,但通常是统一的。统一的过程叫做统一。由于统一性,与其他编程语言如C/C++、Java、Python相比,您可以发现prolog具有非常规的变量行为
nth0(1,行,8)
失败,因为列表
中的元素编号1不是8,而是5。Prolog告诉您它无法使它们匹配。您需要做的是用替换的元素构建一个新的矩阵。