2012-04-08 16 views
1

この再帰を5回実行する必要があります。毎回Rowをインクリメントします。毎回1つずつ追加してください。初心者

私はしばらくの間(行<コル)のように実行したい他の言葉で
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). 

...

もコルは==行は、ステップをスキップした場合。

答えて

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

編集が...最初の引数の意味を確認します、if Col \= Row ... else ...条件を追加して、これは、それは少し珍しい構築用心、例えばhereのドキュメントを参照。とにかく、最初の引数が '読み込み'されることに注意してください。それはそのまま通過しなければならない場合、それは別の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

+0

私が欲しい場合はCOL =行は、そのステップをスキップする場合、私は何をしますか? – Waqas

+0

私は行をインクリメントしていません。私はRowをNum + 1に変更する必要がありますか? – Waqas

関連する問題