1

この再帰を 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) ...のように実行したい

また、Col == Row の場合は、手順をスキップします。

4

1 に答える 1

1

単純な 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).

edit :if Col \= Row ... else ...条件が追加されました。この構成は少し変わっていることに注意してください。たとえば、こちらのドキュメントを参照してください。とにかく、最初の引数が「読み取り」になることに注意してください。それが変更されずに通過する必要がある場合は、別の calculateSum/5 を追加することをお勧めします。

calculateSum(_, _List, _Row, 5, []).
calculateSum(Input, List, Num, Num, Result):-
    Row is Num + 1,
    Col is Num,
    calculateSum(Input, List, Row, Col, Result).
calculateSum([M|Rest], List, Row, Col, Result):-
    Col < 5,
    ....

HTH

于 2012-04-08T18:23:45.757 に答える