2013-07-08 74 views
0

按照四步抽象設計流程定義遞歸規則以計算數學函數。您必須指出(使用註釋代碼)使用哪個步驟。請注意,Prolog規則不會返回值。您需要使用一個參數來保存返回值。您不能使用指數運算符**來計算表達式。在Prolog中評估三變量表達式

編寫一個遞歸規則factbar(F, X, Y, N)來計算F = ((2*X + Y)^N)!(expar的階乘)。該規則必須調用(使用),您所設計的規則expbar ..

現在做這個操作F = ((2*X + Y)^N)我已經寫我的代碼,但我不知道如何在序言寫階乘:

expbar(R, X, Y, N) :- 
    X > 0, Y > 0, N > 0, 
    R is (2 * X + Y) ** N. 

儘管我在我的程序中使用了**,但我不知道如何使用其他方式。

+1

請分享您嘗試過的? –

+1

S.O.不是免費的家庭作業解決方案服務。自己動手製作節目,並在遇到困難時回到自己做過的事情。 –

+0

使用'^'代替'**'。 – false

回答

1

我不知道什麼是「四步抽象設計過程」,你沒有包括那個細節。結果,你將會得到我的兩步遞歸函數設計過程。你的謂詞是正確的,除非你沒有定義pow/3,一個函數來計算權力。這顯然是你任務的關鍵。我們開始做吧。

第一步:確定您的基本情況。使用算術函數,基本情況涉及算術標識。爲求冪,身份是1。換言之,X ** 1 = X.記下來:

pow(X,1,X). 

因爲這是具有兩個輸入和一個結果的功能,我們將編碼它作爲元數-3謂詞。這個事實簡單地說X對第一個力量是X.

第二步。現在考慮歸納情況。如果我有X ** N,我可以將它擴展爲X *(X **(N-1))。通過取冪和歸納法則的定義,這完成了謂詞的定義。將它編碼爲Prolog語法:

pow(X,N,Y) :- 
    N > 1, 
    succ(N0, N), 
    pow(X, N0, Y0), 
    Y is X * Y0, !. 

這給出了計算指數的謂詞。如果您在expbar/4謂詞中替換使用**/2,則可以滿足分配的要求。