Я написал функцию для возврата следующей строки в треугольнике Паскаля с учетом текущей строки:
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]