为什么这个if语句只能在第一步工作

时间:2012-04-08 19:45:16

标签: prolog

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

1 个答案:

答案 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).