Pascals Dreieck in Prolog
-
20-09-2019 - |
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]
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