2017-05-08 79 views
0

我是prolog的初學者,正在嘗試創建斐波那契序列規則。但它不能運行,因爲代碼中的錯誤稱爲算術fib不是函數。使用1參數在Prolog中創建Fibonacci序列

來源爲我的代碼:

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

在此先感謝您的幫助。

+3

你知道Prolog是一個邏輯* *編程語言。含義*謂詞*成功或失敗,它不會**返回一個值。 –

+1

另外,您不能在Prolog中重新分配變量。它們被實例化,並且只能在執行謂詞子句時執行一次,除非由於失敗而發生回溯。因此,例如,如果'N <1'成功,則'S爲0'將用'0'的算術評估實例化'S',然後'N <2'成功,然後'S爲1'將失敗因爲'S'被實例化爲'0'並且'0是1'是錯誤的。在編寫程序之前,您需要閱讀Prolog教程或基本教科書並學習一些關於Prolog的知識。 – lurker

回答

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. 

這如何斐波納契可使用序言中定義的,我所定義的兩個基的情況下元件N0爲0和元件n1是1

,然後我確定了不等於0的任何其他元素或1是FN-1 + FN-2

調用謂詞你只需

?- fib(6,X). 

你想到哪裏X有結果

結果這種情況下將是

X = 8 
+1

你真的應該使用'N> 1',而不是'N \ = 0,N \ = 1'。否則,'fib(-1,X)'溢出堆棧,不會簡單地失敗。 – lurker

+0

你是對的! 沒有注意到 –