1

我已经编写了一个函数,用于在给定当前行的情况下返回帕斯卡三角形中的下一行:

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

我希望能够找到三角形中的第 n 行,例如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]
4

2 回答 2

0

您需要 PascalA 的基本情况,其中 N = 0。

于 2009-11-15T15:12:42.797 回答
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).
于 2009-11-15T15:26:13.690 回答