私はPrologを学んでおり、練習問題として、与えられた数(すなわち、0 = 0,1 = 1,2,2 = 3,3 = 6)までのすべての数の合計を計算する単純なデータベースを試しています。 、4 = 10、...)。十分に簡単:これはPrologでテール再帰的に行うことができますか?
スタックオーバーフローでどこかcounting_sum(150000, X).
周りに吹く
counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
。私は、プロローグに末尾再帰を行うことができますことを理解し、私は、ルールの最後に再帰呼び出しを移動する場合、私はそれがcounting_sum(PrevNum, PrevSum)
で統一されています前に、私はPrevSum
を使用することはできません私に言っていると仮定し
error(instantiation_error,(is)/2)
を取得します。それは正しいのですか?これを尾を再帰的にする方法はありますか?私はGNU Prolog 1.3.1を使用しています。
P.S.私はまだ専門用語では不安定です。私が間違って言葉を使用した場合は教えてください。
あなたがインスタンス化エラーの原因について正しいです。 –