1

需要运行此递归 5 次。并每次增加 Row 。

calculateSum([],List,Row,5,L) :- nl.
calculateSum([M|Rest],List,Row,Col,[Y|Tail]):-
    calcHeu(Rest,L),sum(L,S),index(List, Row, Col, V),Y is V + S,inc(Row),
    calculateSum(M,List,Row,Z,Tail).

换句话说,我想像 while(Row < Col) ...

如果 Col == Row 则跳过该步骤。

4

1 回答 1

1

我按照简单 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).

编辑:添加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,
    ....

高温高压

于 2012-04-08T18:23:45.757 回答