Tôi có đoạn mã sau đây prolog:Tại sao lệnh này gây ra tràn ngăn xếp trong prolog?
num(0).
num(X) :- num(X1), X is X1 + 1.
fact(0,1) :-!.
fact(X,Y) :- X1 is X-1, fact(X1,Y1), !, Y is Y1 * X.
fact(X) :- num(Y), fact(Y,X).
ai đó có thể vui lòng giải thích tại sao các lệnh sau đây gây ra một chồng tràn? Cảm ơn trước.
fact(6).
Có lẽ bạn nên chỉ ra cho tân binh rằng vấn đề bạn phân tích có thể được ngăn chặn bằng cách thêm 'X> 0' cho cơ thể của mệnh đề thứ 2 cho ** thực tế/2 **. – hardmath