Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 生成一个整数范围--”;“本地堆栈外”;[初学者]_Prolog_Failure Slice_Clpfd - Fatal编程技术网

Prolog 生成一个整数范围--”;“本地堆栈外”;[初学者]

Prolog 生成一个整数范围--”;“本地堆栈外”;[初学者],prolog,failure-slice,clpfd,Prolog,Failure Slice,Clpfd,gen(N,R): R是按顺序介于0和N-1之间的值。 N非零正整数。N将始终给出 例如:?-genN(2,R)。给出R=0;R=1。我是这样实现的,但它有“超出本地静态错误”: 要理解程序没有终止的原因,请使用。为此,我们将插入一些额外的目标false,以帮助理解为什么您添加的目标不相关。如果这个结果片段没有终止,那么您的原始程序也不会终止。正如你所看到的,在这一部分没有发生太多的事情。事实上,您的程序将永远终止 gen(_X,0) :- false. gen(X,R) :- gen(X,

gen(N,R)

R
是按顺序介于0和N-1之间的值。
N
非零正整数。
N
将始终给出

例如:
?-genN(2,R)
。给出
R=0;R=1。
我是这样实现的,但它有“超出本地静态错误”:


要理解程序没有终止的原因,请使用。为此,我们将插入一些额外的目标
false
,以帮助理解为什么您添加的目标不相关。如果这个结果片段没有终止,那么您的原始程序也不会终止。正如你所看到的,在这一部分没有发生太多的事情。事实上,您的程序将永远终止

gen(_X,0) :- false. gen(X,R) :- gen(X,R1), false, R is R1+1, R<X, R>=0.
 ?- genN2(3,R).  
    R = 0 ;
    R = 1 ;
    R = 2 ;
    ERROR: Out of local stack
gen(_X,0) :- false. gen(X,R) :- gen(X,R1), false, R is R1+1, R<X, R>=0.
gen(N0, R) :-
   N1 is N0-1,
   between(0, N1, R).