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 ステートメントをカットで 2 つのルールに分割することは間違いなくできます (私の意見では、とにかくこれが望ましいです: 試してみてください: ";" はできるだけ使用しないでください)。

これを試してください(「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 に答える