Pregunta

He escrito una función para devolver la siguiente fila en el triángulo de Pascal dada la fila actual:

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

Quiero ser capaz de encontrar la fila n en el triángulo, por ejemplo, pascal(5,Row), Row=[1,5,1,0,1,0,5,1]. Tengo esto:

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

Obviamente Row debería ser la última que se encuentra antes de n==0. ¿Cómo puedo devolverlo? He intentado utilizar la palabra clave is, es decir Row is NR pero que no está permitido, aparentemente. Cualquier ayuda?


Si intenta usar is en las listas me pone:

! 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]
¿Fue útil?

Solución

Haga el caso base, N > 0 cancela su cálculo ...

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

Otros consejos

Es necesario un caso base para Pascala donde N = 0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top