Prolog样式循环不会溢出?

时间:2016-10-24 14:18:08

标签: prolog

Prolog中的典型循环代码如下:

loop_test :-
  format('loop...~n'),
  loop_test.

如另一个问题所述: How Can I simulate a while loop in Prolog with unchangeable conditions?

这是我的问题:这种递归形式是否可以安全地防止溢出?通常这样的C,C ++,Python的递归代码会溢出,因为在每个函数调用中添加了一个新的堆栈。我在loop_testtrace以上执行了。它类似于:

?- trace.
?- loop_test.
  Call: (6) loop_test2 ? creep
  Call: (7) format('loop...~n') ? creep
loop...
  Exit: (7) format('loop...~n') ? creep
  Call: (7) loop_test2 ? creep
  Call: (8) format('loop...~n') ? creep
...
loop...
  Exit: (158) format('loop...~n') ? creep
  Call: (158) loop_test2 ? creep
  Call: (159) format('loop...~n') ? creep
...

显然,数字正在增加。 有了这个简单的代码,我找不到内存增加;我执行loop_test超过5分钟并跟踪写入/ proc / xxx / status的VmPeak(虚拟内存的峰值大小),但没有观察到任何变化。

我想了解上述代码(loop_test)是否真的安全吗?为什么安全? (或者在Prolog中实现循环的更安全的方法)。

非常感谢。

0 个答案:

没有答案