我们必须在几个有约束的环境(ECLiPSe ic、ECLiPSe fd、SWI-prolog、GNU-prolog、NaxosSolver 等)中解决 prolog 中的骗子问题。我已经使用了尾递归(我认为)和我能想到的尽可能多的削减(这样我猜分辨率树没有变得尽可能大。如果需要,我可以发布我的代码。
当数据数变为 10000-50000 时,我在 ECLiPSe 中的 fd 和 ic 中收到堆栈溢出,在 SWI-prolog 中,程序永远运行。所以我想增加 ECLiPSe 中堆栈的大小,但我看不到如何。我试图在我的代码的第一行写这个:
:-set_flag(local_stack_allocated, 512).
,但它说超出范围。
看看 eclipse 说了什么,这可能会有所帮助: *尽管进行了垃圾收集,但全局/跟踪堆栈的溢出!您可以使用“-g kBytes”(GLOBALSIZE)选项来获得更大的堆栈。峰值大小为:全局堆栈 128832 KB,跟踪堆栈 5312 KB