私はプロローグが初めてです。私は再帰的なプログラムを実行していますが、問題は答えを出力しても..答えを出力した後に停止せず、最終的に「ローカルスタックから」が表示されることです。左再帰の問題である可能性があることを読みましたが、すでに言ったように、私はプロローグが初めてで、何が起こるのかよくわかりません...だから..ここにコードがあります。
f(X, Y):-
Y is sqrt(1-((X-1)*(X-1))).
sum(SEGMENTS, 1, TOTAL):-
f(2/SEGMENTS*1,H1),
TOTAL is (2/SEGMENTS)*H1.
sum(SEGMENTS, NR, TOTAL):-
N1 is (NR-1),
sum(SEGMENTS, N1, S1),
f(2/SEGMENTS*NR,H1),
f(2/SEGMENTS*N1,H2),
TOTAL is S1 + (2/SEGMENTS)*((H1+H2)/2).
台形則などで半円の面積を計算することになっています。すでに言ったように..終了しますが、基本ケースの合計(セグメント、1、合計)に到達した後、2番目の選択肢で関数を呼び出します... :S
みんなありがとう!
また、実行すると次のようになります
?- sum(3000,3000,TOTAL).
TOTAL = 1.5707983753431007 ;
ERROR: Out of local stack