そのため、Prolog インタープリターは Last Call Optimization を実装しています。
length([], Acc, Acc).
length([_|T], Acc, X) :- NewAcc is Acc+1, length(T, NewAcc, X).
O(1)空間で呼び出すことができます。
ただし、デバッグモードに入ると、これは無効になります。
私の質問はただ「なぜ?」です。確かにこれはデバッグのポイント全体を壊しますか? プログラムが正常に動作していることを確認できなくなりました...?