我已经写的函数对于给定的当前行中帕斯卡三角的下一行返回:

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

显然Rown==0之前找到的最后一个。我怎么能退货吗?我尝试使用is关键字,即Row is NR但这是不允许的,apparantly。任何帮助?


尝试使用列表上的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).

其他提示

您需要pascalA碱情况下N = 0。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top