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语句doest工作。有没有其他方法可以让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,,,_......inininly
答案 0 :(得分:0)
在不知道你的代码应该做什么以及它得到了什么输入的情况下,有点难以辨别,但你绝对可以将if-then-else语句分解为两个带切割的规则(在我看来,这是优选的) :尽量避免使用“;”。
试试这个(注意我在“Rest”的递归调用中更改了“List”的fir出现,因为我觉得这就是你想要的东西):
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).