尝试在序言中打印简单数字时出现意外错误
Unexpected error when am trying to print a simple number in prolog
我正在做一个练习,我必须做一些事情。正在创建一个计算 pow(2,c) 的“函数”,其中 c 是一个计数器,如果计数器大于我放置的静态数字,则“函数”必须 returns 数字 c。问题是,当我试图测试它时,编译器运行了几个错误,之后程序停止运行,我不知道为什么有人可以帮助我?
我正在测试它:
数 (2,1,C,6,M)。其中 6 是我设置的静态数字,它与计数器 C 进行比较,其中 C 是工作正常的“函数”pow3 的结果。
主要问题出在“功能”编号。
我的代码
num(A,B,C,D,M) :- pow3(A,B,C),Y is (B+1),num(A,Y,C,D,M).
num(A,B,C,D,M) :- C > D,M is C.
pow3(X,Y,Z) :- powend(X,Y,1,Z),!.
powend(_,0,A,Z) :- Z is A.
powend(X,Y,A,Z) :- Y1 is Y - 1, A1 is A*X, powend(X,Y1,A1,Z).
我得到的错误是:
1) trail stack overflow
2) cstr stack overflow
3) global stack overflow
4) local stack overflow
5) Program terminated
您的代码的问题是,一旦计算出第一个幂,变量 C
就会变成常量 1
。
为了解决这个问题,在每次递归调用时,必须使用一个新变量 C1
。
此外,必须明确定义执行递归情况的条件。
num(_, _, C, D, M) :- C > D, M is C.
num(A, B, C, D, M) :- C =< D, pow3(A,B,C1), Y is B+1, num(A,Y,C1,D,M).
示例:
?- num(2,0,1,6,M).
M = 8 ;
false.
我正在做一个练习,我必须做一些事情。正在创建一个计算 pow(2,c) 的“函数”,其中 c 是一个计数器,如果计数器大于我放置的静态数字,则“函数”必须 returns 数字 c。问题是,当我试图测试它时,编译器运行了几个错误,之后程序停止运行,我不知道为什么有人可以帮助我? 我正在测试它: 数 (2,1,C,6,M)。其中 6 是我设置的静态数字,它与计数器 C 进行比较,其中 C 是工作正常的“函数”pow3 的结果。 主要问题出在“功能”编号。 我的代码
num(A,B,C,D,M) :- pow3(A,B,C),Y is (B+1),num(A,Y,C,D,M).
num(A,B,C,D,M) :- C > D,M is C.
pow3(X,Y,Z) :- powend(X,Y,1,Z),!.
powend(_,0,A,Z) :- Z is A.
powend(X,Y,A,Z) :- Y1 is Y - 1, A1 is A*X, powend(X,Y1,A1,Z).
我得到的错误是:
1) trail stack overflow
2) cstr stack overflow
3) global stack overflow
4) local stack overflow
5) Program terminated
您的代码的问题是,一旦计算出第一个幂,变量 C
就会变成常量 1
。
为了解决这个问题,在每次递归调用时,必须使用一个新变量 C1
。
此外,必须明确定义执行递归情况的条件。
num(_, _, C, D, M) :- C > D, M is C.
num(A, B, C, D, M) :- C =< D, pow3(A,B,C1), Y is B+1, num(A,Y,C1,D,M).
示例:
?- num(2,0,1,6,M).
M = 8 ;
false.