Prolog 每次加一个。初学者

Prolog 每次加一个。初学者,prolog,Prolog,需要运行这个递归5次。并每次递增一行 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

需要运行这个递归5次。并每次递增一行

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==Row,则跳过该步骤。

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

HTH

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

HTH

如果col=row跳过该步骤,我该怎么办?我不是在增加row。我是否需要更改行为Num+1。如果我改变它,它会给我堆栈溢出如果我想,如果col=row跳过这一步,我该怎么办?我不是在增加row。我是否需要更改行为Num+1。如果我更改它,它会导致堆栈溢出