문제

현재 행을 감안할 때 Pascal 's Triangle에서 다음 행을 반환하는 기능을 작성했습니다.

pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
    pascal_next_row([H2|T],B),
    A is H + H2.

삼각형에서 Nth Row를 찾고 싶어요. pascal(5,Row), Row=[1,5,1,0,1,0,5,1]. 나는 이것을 가지고있다:

pascal(N,Row):-
 pascalA(N,[1,0],Row).

pascalA(N,R,_Row):-
 N > 0,
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,NR).

확실히 Row 전에 발견 된 마지막 것입니다 n==0. 어떻게 반환 할 수 있습니까? 나는 사용 시도했다 is 키워드, 즉 Row is NR 그러나 그것은 허용되지 않습니다. 도움이 있습니까?


사용하려고합니다 is 목록에서 나를 얻을 수 있습니다.

! Domain error in argument 2 of is/2
! expected expression, but found [1,4,6,4,1,0]
! goal:  _23592586 is[1,4,6,4,1,0]
도움이 되었습니까?

해결책

기본 케이스를 수행하고 N > 0 계산 취소 ...

pascalA(N,R,_Row):-
 N > 0, %% this evaluates to false so the calculation gets canceled
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,NR).

pascalA(0,R,R). %% this should be the base case... hope I got it correct...

pascalA(N,R,_Row):-
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,_Row).

다른 팁

n = 0 인 파스 칼라의 기본 케이스가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top