Prolog - 矩阵中的行总和

时间:2010-12-04 22:41:23

标签: 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程序来添加每个ROW中的所有值。 我是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).

1 个答案:

答案 0 :(得分:1)

您不需要计数器IJ。只需解压缩列表即可。这是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).

应用相同的技术来实施sumresult