2017-05-08 3 views
0

Ich bin ein Anfänger auf Prolog und versucht, Fibonacci-Sequenzregeln zu erstellen. Aber es kann nicht ausgeführt werden, weil Fehler im Code genannt arithmetische Fib ist keine Funktion.Erstellen Fibonacci-Sequenz in Prolog mit 1 Parameter

Quelle für meinen Code:

fib(N):- 
    N<1, S is 0, 
    N<2, S is 1, 
    N1 is fib(N-1), 
    N2 is fib(N-2), 
    S is N1 + N2, 
    write(S, " "). 

Vielen Dank im Voraus für die Hilfe.

+3

sein Wissen Sie Prolog a * logisch * Programmiersprache. Das bedeutet, dass ein * Prädikat * entweder erfolgreich ist oder fehlschlägt, es gibt jedoch ** keinen Wert zurück. –

+1

Außerdem können Sie Variablen in Prolog nicht neu zuweisen. Sie werden instanziiert und können nur einmal in der Ausführung einer Prädikatsklausel ausgeführt werden, es sei denn, das Zurückverfolgen erfolgt aufgrund eines Fehlers. Wenn beispielsweise "N <1" erfolgreich ist, dann wird "S ist 0", wird "S" mit der arithmetischen Auswertung von "0" instanziiert, dann wird "N <2" erfolgreich und dann wird "S ist 1" wird fehlschlagen da "S" mit "0" instanziiert wird und "0 ist 1" ist falsch. Sie müssen ein Prolog-Tutorial oder ein grundlegendes Lehrbuch lesen und ein wenig über Prolog lernen, bevor Sie Ihr Programm schreiben. – lurker

Antwort

1
fib(0,0). 
fib(1,1). 

fib(N,R):- N>1, 
      N1 is N-1, 
      N2 is N-2, 
      fib(N1,R1), 
      fib(N2,R2), 
      R is R1+R2. 

dies, wie Fibonacci definiert werden kann prolog Verwendung I definiert die beiden Basis Fällen, in denen das Element n0 0 und Element ist n1 1 ist

und dann identifiziert I andere Element, das nicht gleich 0 ist, oder 1 sein Fn-1 + Fn-2

das Prädikat Sie rufen einfach

?- fib(6,X). 

, wo Sie X erwarten, dass das Ergebnis haben

das Ergebnis dieser Fall

X = 8 
+1

Sie sollten wirklich 'N> 1', nicht 'N \ = 0, N \ = 1' verwenden. Andernfalls "fib (-1, X)" überläuft den Stapel und wird nicht einfach fehlschlagen. – lurker

+0

Sie haben Recht! Habe das nicht bemerkt –