Matrix Prolog-矩阵中的行和

Matrix Prolog-矩阵中的行和,matrix,prolog,Matrix,Prolog,n x n矩阵可以表示为n个列表的列表,每个列表包含n个元素, 矩阵实际上可以 1 2 3 4 5 6 7 8 9 写为[[1,2,3],[4,5,6],[7,8,9]] 我需要编写一个Prolog程序来添加每行中的所有值。 我是Prolog新手,请帮忙。 提前感谢 下面是我所做的,但似乎不起作用 sum(X):- result(X,0,0,Y),!. result([H|T],I,J,Length):- rowTotal([H|T],J,Sum), write('Su

n x n矩阵可以表示为n个列表的列表,每个列表包含n个元素, 矩阵实际上可以 1 2 3 4 5 6 7 8 9 写为[[1,2,3],[4,5,6],[7,8,9]]

我需要编写一个Prolog程序来添加每行中的所有值。 我是Prolog新手,请帮忙。 提前感谢

下面是我所做的,但似乎不起作用

sum(X):-
    result(X,0,0,Y),!.

result([H|T],I,J,Length):-
    rowTotal([H|T],J,Sum),
    write('Sum of Row: '),
    write(Sum),nl,
    (not(I = Length)) ->
    (NewI is I + 1,
    result([H|T],NewI,0,Length);!).

rowTotal([H|T],J,Sum):-
    rowValue(H,J,Value),
    rowTotal(T,NewSum),
    Sum is Value + NewSum.

rowTotal([],0).

rowValue([H|T],J,Value):-
    (J < 3) ->
    Value = H,
    NewJ is J+1,
    rowValue([H|T],NewJ,Value).
sum(X):-
结果(X,0,0,Y),!。
结果([H | T],I,J,长度):-
行总数([H | T],J,和),
写入('行和:'),
写(和),nl,
(非(I=长度))->
(NewI是I+1,
结果([H | T],NewI,0,长度);!)。
行总数([H | T],J,和):-
行值(H,J,值),
总行数(T,NewSum),
总和是Value+NewSum。
行总数([],0)。
行值([H | T],J,值):-
(J<3)->
值=H,
NewJ是J+1,
rowValue([H | T],NewJ,Value)。

您不需要计数器
I
J
。只需边走边打开列表。以下是rowTotal的解决方案:

rowTotal([], 0).
rowTotal([H|T], Sum) :-
    rowTotal(T, SubTotal),
    Sum is H + SubTotal.
下面的尾部递归解决方案稍微复杂一些,但效率更高:

rowSum(L, Sum) :-
    rowResult(L, 0, Sum).

rowResult([], Acc, Acc).
rowResult([H|T], Acc, Sum) :-
    S is H + Acc,
    rowResult(T, S, Sum).

应用相同的技术实现
sum
result

您不需要计数器
I
J
。只需边走边打开列表。以下是rowTotal的解决方案:

rowTotal([], 0).
rowTotal([H|T], Sum) :-
    rowTotal(T, SubTotal),
    Sum is H + SubTotal.
下面的尾部递归解决方案稍微复杂一些,但效率更高:

rowSum(L, Sum) :-
    rowResult(L, 0, Sum).

rowResult([], Acc, Acc).
rowResult([H|T], Acc, Sum) :-
    S is H + Acc,
    rowResult(T, S, Sum).

应用同样的技术来实现
sum
result

这看起来很像家庭作业。因此,它不是一个作弊网站。注意:如果你自己有问题,并用你能想出的任何代码片段更新你的问题,你会得到更热烈的欢迎。显然,它不一定是有效的(否则你就不会发布问题),但它必须证明你对这个问题有很好的思考。是的,这是我的家庭作业,我需要一些指导……这看起来很像家庭作业。因此,它不是一个作弊网站。注意:如果你自己有问题,并用你能想出的任何代码片段更新你的问题,你会得到更热烈的欢迎。显然,它不一定是有效的(否则你就不会发布问题),但它必须证明你对这个问题有很好的思考。是的,这是我的家庭作业,我需要一些这方面的指导。。。