単純な Prolog プログラムで通常必要とされるように、引数を順序付けました。指定がなければ、私はあなたのコードについて推測することができます.MとRestを交換したことに注意してください. 最初の引数の意味を確認してください...
calculateSum(_, _List, _Row, 5, []).
calculateSum([M|Rest], List, Row, Col, Result):-
Col < 5,
( Col \= Row
-> calcHeu(M, L),
sum(L, S),
index(List, Row, Col, V),
Y is V + S,
Result = [Y|Tail]
; Result = Tail
),
Row1 is Row + 1,
Col1 is Col + 1,
calculateSum(Rest, List, Row1, Col1, Tail).
edit :if Col \= Row ... else ...
条件が追加されました。この構成は少し変わっていることに注意してください。たとえば、こちらのドキュメントを参照してください。とにかく、最初の引数が「読み取り」になることに注意してください。それが変更されずに通過する必要がある場合は、別の calculateSum/5 を追加することをお勧めします。
calculateSum(_, _List, _Row, 5, []).
calculateSum(Input, List, Num, Num, Result):-
Row is Num + 1,
Col is Num,
calculateSum(Input, List, Row, Col, Result).
calculateSum([M|Rest], List, Row, Col, Result):-
Col < 5,
....
HTH