2012-04-08 93 views
1

需要运行这个递归5次。并每次增加Row。每次添加一个。初学者

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

换句话说我要像而(行< COL)...

并且如果山口==行然后跳到步骤运行。

回答

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 2012-04-08 19:14:28

+0

我不增加行。我需要改变行是Num + 1.如果我改变它,它会给我堆栈溢出 – Waqas 2012-04-08 21:35:16