我已经编写了一个函数,用于返回给定当前行的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行,例如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]
答案 0 :(得分:0)
你需要一个pascalA的基本案例,其中N = 0。
答案 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).