我試圖在Prolog中實現一個簡單的常見差異算法(http://www.purplemath.com/modules/nextnumb.htm)(我很新),我似乎無法制定正確的規則。 我:Prolog常見差異,多項式序列中的下一個數
nextitem([A|B], NextI):-lastitem([A|B],X),
rowbelow([A|B],[Z]),lastitem([Z],Y), nextI is X+Y.
nextitem([],0).
%% recursive case: ignore first item, seek last item of rest of list
lastitem([First | Rest], Last) :-lastitem(Rest, Last).
lastitem([OnlyOne], OnlyOne).
%%at least two things in the list
rowbelow([A,B|T], [X|Y]) :-X is B-A, rowbelow([B|T],Y).
rowbelow([A,B|T], [X]) :-X is B-A.
的問題似乎是在我的下一個項目,(和感覺我應該有下一個項目遞歸調用的地方,但也許不是?)
例如: rowbelow([6,7,14,33],X)。 產生適當的[1,7,19](對於聚的x^3 + 6)
但下一個項目中不產生70 ..
跟蹤好像我的行下面呼叫中的下一項是錯誤,我想我錯過了一個遞歸調用,以繼續移動到該行...
任何想法如何解決nextitem規則?真的很感謝任何幫助,因爲我可能在這20小時,它並沒有'只是點擊'尚未...
我沒有得到你想要在這裏計算。但是這裏有一些注意事項:nextI在nextitem中拼寫錯誤(它應該是NextI)。它也似乎是,當你調用rowrowow它應該是rowbelow([A | B],Z),而不是rowbelow([A | B],[Z])。 rowbelow的第二個子句我認爲應該是rowbelow([_],[]),因爲它是基本的情況 – gusbro 2011-05-10 16:16:20