prolog - 超出本地堆栈错误
prolog - out of local stack error
我正在尝试创建一个具有以下规格的程序:
N=int
X=int
R=list containing N copies of X
• R=[] if N=0
• N will always be given
• Either X or R will be given
示例结果:
?- fill(4,2,R).
R=[2,2,2,2].
?- fill(4,X,[2,2,2,2]).
X=2.
当我 运行 第一个填充语句时,我有以下代码给我 'out of local stack error' 。是什么原因造成的?
fill(0,_,[]).
fill(N,X,R) :- N1 is N-1, fill(N1,X,R), append(R,[X], R).
原因是:即使N=0也使用第二个子句。
这导致调用链 fill(0,...) => fill(-1,....) => fill(-2, ....) => ....
补救措施:在第一个子句中添加一个 cut 应该可以避免这种情况。
我正在尝试创建一个具有以下规格的程序:
N=int
X=int
R=list containing N copies of X
• R=[] if N=0
• N will always be given
• Either X or R will be given
示例结果:
?- fill(4,2,R).
R=[2,2,2,2].
?- fill(4,X,[2,2,2,2]).
X=2.
当我 运行 第一个填充语句时,我有以下代码给我 'out of local stack error' 。是什么原因造成的?
fill(0,_,[]).
fill(N,X,R) :- N1 is N-1, fill(N1,X,R), append(R,[X], R).
原因是:即使N=0也使用第二个子句。
这导致调用链 fill(0,...) => fill(-1,....) => fill(-2, ....) => ....
补救措施:在第一个子句中添加一个 cut 应该可以避免这种情况。