Пролог - сумма строки в матрице - PullRequest
1 голос
/ 05 декабря 2010

Матрица nxn может быть представлена ​​в виде списка из n списков, каждый из которых содержит n элементов, причем матрица может фактически 1 2 3 4 5 6 7 8 9 записываться как [[1, 2, 3], [4, 5,6], [7, 8, 9]].

Мне нужно написать программу 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 Ответ

1 голос
/ 05 декабря 2010

Вам не нужны счетчики 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...