2012-04-08 3 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). 

은 내가 (행 < 골) ...

그리고 또한 골 == 행 다음 단계를 건너 뛰면 동안 같이 실행하려는.

답변

1

나는 간단한 프롤로그 프로그램에서 일반적으로 필요한 인수를 지시했습니다. 사양이 없으면 코드에 대해 추측 할 수 있습니다. M과 나머지를 바꿨습니다.

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

행을 증가시키지 않습니다. 행을 변경해야합니까 Num + 1입니다. 만약 내가 그것을 cahange 스택 오버플로를 제공합니다 Logged – Waqas

관련 문제