0
calculateSum(_, _List, _Row, _Col, []).
    calculateSum([M|Rest],List,Row,Col,[Y|Tail]):-
    Col == Row -> Col1 is Col + 1,calculateSum(List,List,Row1,Col1,Tail); 
    calcHeu(Rest,L),
    sum(L,S),
    index(List, Row, Col, V),
    Y is V + S,
    %Row1 is Row + 1,
     Col1 is Col + 1,
    calculateSum(List,List,Row1,Col1,Tail).

为什么这个 Col == Row if 语句不起作用。有没有其他方法可以让如果 Row == Col 跳过该步骤?

编辑

通过做这样的事情。

(Col \= Row ->
calcHeu(Rest,L),
sum(L,S),
index(List, Row, Col, V),
Y is V + S,
Col1 is Col + 1,
calculateSum(List,List,Row1,Col1,Tail)
;
Col1 is Col + 1,calculateSum(List,List,Row1,Col1,Tail)
).

它无限地打印出 [22, , ,_......

4

1 回答 1

0

如果不知道你的代码应该做什么以及它得到什么输入,这有点难以判断,但你绝对可以将你的 if-then-else 语句分成两条规则(无论如何我认为这更可取:尝试尽量避免使用“;”)。

试试这个(请注意,我已经在递归调用“Rest”中更改了“List”的第一次出现,因为我认为这就是你想要的):

calculateSum(_, _List, _Row, _Col, []).
calculateSum([_M|Rest],List,Row,Row,[_Y|Tail]):-
    !,
    Col1 is Col + 1,
    calculateSum(Rest,List,Row1,Col1,Tail).

calculateSum([M|Rest],List,Row,Col,[Y|Tail]):-
    calcHeu(Rest,L),
    sum(L,S),
    index(List, Row, Col, V),
    Y is V + S,
    Col1 is Col + 1,
    calculateSum(Rest,List,Row1,Col1,Tail).
于 2012-05-19T22:53:34.953 回答