Tôi đang học Prolog, và như một bài tập, tôi đang thử nghiệm với một cơ sở dữ liệu đơn giản tính tổng của tất cả các con số lên đến số đã cho (ví dụ 0 = 0, 1 = 1, 2 = 3, 3 = 6 , 4 = 10, ...). Dễ dàng đủ:Điều này có thể được thực hiện đuôi đệ quy trong Prolog?
counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
Điều đó thổi lên một nơi nào đó xung quanh counting_sum(150000, X).
với tràn ngăn xếp. Tôi hiểu rằng Prolog có thể làm đuôi đệ quy, nhưng nếu tôi di chuyển các cuộc gọi đệ quy đến hết quy tắc, tôi nhận được
error(instantiation_error,(is)/2)
mà tôi giả sử là nói với tôi rằng tôi không thể sử dụng PrevSum
trước khi nó được thống nhất với counting_sum(PrevNum, PrevSum)
. Điều đó có đúng không, và có cách nào để làm cho cái đuôi này đệ quy không? Tôi đang sử dụng GNU Prolog 1.3.1 nếu điều đó tạo ra bất kỳ sự khác biệt nào.
P.S. Tôi vẫn run rẩy về thuật ngữ. Hãy cho tôi biết nếu tôi đã sử dụng các điều khoản không chính xác.
Bạn có quyền về nguyên nhân của lỗi instantiation. –