我對我的CS任務有些麻煩。我試圖調用之前在一個新規則中創建的另一條規則,該規則將計算冪函數的階乘(例如Y =(N^X)!)。我認爲我的代碼的問題是exp(Y,X,N)中的Y在我稱爲階乘(Y,Z)時沒有繼續,儘管我並不完全確定。我一直在試圖找到一個這樣的例子,但我一直無法找到任何東西。Prolog遞歸(功率函數的階乘)
我不期待答案,因爲這是家庭作業,但任何幫助將不勝感激。
這裏是我的代碼:
/* 1.2: Write recursive rules exp(Y, X, N) to compute mathematical function Y = X^N, where Y is used
to hold the result, X and N are non-negative integers, and X and N cannot be 0 at the same time
as 0^0 is undefined. The program must print an error message if X = N = 0.
*/
exp(_,0,0) :-
write('0^0 is undefined').
exp(1,_,0).
exp(Y,X,N) :-
N > 0, !, N1 is N - 1, exp(Y1, X, N1), Y is X * Y1.
/* 1.3: Write recursive rules factorial(Y,X,N) to compute Y = (X^N)! This function can be described as the
factorial of exp. The rules must use the exp that you designed.
*/
factorial(0,X) :-
X is 1.
factorial(N,X) :-
N> 0, N1 is N - 1, factorial(N1,X1), X is X1 * N.
factorial(Y,X,N) :-
exp(Y,X,N), factorial(Y,Z).
注意,您會在'factorial/3'的主體中得到一個關於'Z'的單例變量警告。你的問題可能在那裏。如果你得到一個單例錯誤警告,並且你不知道該怎麼做,請嘗試用'_'替換該變量。如果由此產生的表達沒有意義,你可以告訴你有更深的問題。 –
@DanielLyons好了,所以我解決了你現在提出的問題,看起來問題似乎是程序執行X^N,但是它不會繼續計算它的階乘。 – Jordanthedud
嘗試使用'trace'來調試它。我的期望是,你有一個有趣的順序變量,你可能意味着像'factorial(Y,X,N): - exp(F,X,N),階乘(Y,F)'。 –