prolog - 超出本地堆栈错误

时间:2015-05-11 11:33:52

标签: prolog

我正在尝试创建一个具有以下规范的程序:

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.

当我运行第一个fill语句时,我有以下代码让我“摆脱本地堆栈错误”。是什么导致了它?

fill(0,_,[]).
fill(N,X,R) :- N1 is N-1, fill(N1,X,R), append(R,[X], R).

1 个答案:

答案 0 :(得分:2)

原因是:即使N = 0,也使用第二个claused。

这会导致一系列调用fill(0,...)=> fill(-1,....)=> fill(-2,....)=> ....

补救措施:在第一个条款中添加一个剪切应该避免这种情况。