Prolog语言中的Pascal三角形

Prolog语言中的Pascal三角形,prolog,pascals-triangle,Prolog,Pascals Triangle,我编写了一个函数,用于返回给定当前行的Pascal三角形中的下一行: pascal_next_row([X],[X]). pascal_next_row([H,H2|T],[A|B]):- pascal_next_row([H2|T],B), A is H + H2. 我希望能够找到三角形中的第n行,例如pascal5,row,row=[1,5,1,0,1,0,5,1]。我有这个: pascal(N,Row):- pascalA(N,[1,0],Row). pascalA(

我编写了一个函数,用于返回给定当前行的Pascal三角形中的下一行:

pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
    pascal_next_row([H2|T],B),
    A is H + H2.
我希望能够找到三角形中的第n行,例如pascal5,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).
显然,行应该是在n==0之前找到的最后一行。我怎样才能退货?我尝试使用is关键字,即Row是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]

您需要pascalA的基本情况,其中N=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).

我似乎不能在列表上使用is函数。我用的是SICStus,我发现了错误!is/2的参数2中存在域错误!预期表达式,但找到[1,4,6,4,1,0]!目标:_23592586是[1,4,6,4,1,0]哦,对不起。。。我忘了那是一张单子。。。我是凭记忆写的,读到:没有测试。。。我认为用=替换可能有用。。。