Frage

Ich habe eine Funktion geschrieben für die nächste Zeile in Pascals Dreieck Rückkehr der aktuelle Zeile angegeben:

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

Ich möchte in der Lage sein, die n-te Zeile in dem Dreieck zu finden z.B. pascal(5,Row), Row=[1,5,1,0,1,0,5,1]. Ich habe diese:

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

sollte Offensichtlich Row die letzte vor n==0 gefunden werden. Wie kann ich ihn zurückgeben? Ich versuchte, das is Schlüsselwort, das heißt Row is NR aber das ist nicht erlaubt, apparantly. Jede Hilfe?


Der Versuch, is auf Listen zu verwenden, wird mir:

! 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]
War es hilfreich?

Lösung

Die Basis- Fall, bricht N > 0 Ihre Berechnung ...

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

Andere Tipps

Sie benötigen einen Basisfall für Pascala wobei N = 0 ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top