增加ECLiPSe / prolog / fd中的堆栈大小

时间:2013-05-22 21:40:58

标签: prolog stack overflow constraint-programming

我们必须解决prolog中的liars问题,在几个有约束的环境中(ECLiPSe ic,ECLiPSe fd,SWI-prolog,GNU-prolog,NaxosSolver等)。我已经使用了尾部递归(我认为)和我能想到的那么多切割(这样我认为分辨率树没有达到它可能的大。如果需要,我可以发布我的代码。

当数据编号变为10000-50000时,我在ECLiPSe和SWI-prolog中的fd和ic中收到堆栈溢出,程序将永远运行。所以我想增加ECLiPSe中的堆栈大小,但我看不出如何。 我试着写下我的代码的第一行:

:-set_flag(local_stack_allocated, 512).

,但它说超出了范围。

查看eclipse所说的内容,这可能会有所帮助: * 尽管垃圾收集,但全局/跟踪堆栈溢出! 您可以使用“-g kBytes”(GLOBALSIZE)选项来获得更大的堆栈。 峰值大小为:全局堆栈128832千字节,跟踪堆栈5312千字节

1 个答案:

答案 0 :(得分:2)

首先,从错误消息文本中我假设你的意思是ECLiPSe约束逻辑编程系统,而不是Eclipse IDE。

其次,你如何启动ECLiPSe?如何将代码加载到ECLiPSe?

试试这个(你说你在Windows上):

  1. 从ECLiPSe源文件(例如'myprogram.ecl')所在的文件夹中打开命令行。有关说明,请查看此页面:http://www.techsupportalert.com/content/how-open-windows-command-prompt-any-folder.htm
  2. 在命令行中输入eclipse -g 512000并按ENTER键。
  3. 使用[myprogram].加载程序(放置ECLiPSe源文件的名称而不是'myprogram')。
  4. 照常执行查询。
  5. 但是我怀疑你的程序只是永远运行并且占用了所有内存,所以这一切可能最终都无济于事。

    EDIT。更新了TkECLiPSe的说明:

    1. 在菜单中的TkECLiPSe中选择工具 - > TkECLiPSe偏好编辑器。
    2. 在首选项窗口中查找选项“全局/跟踪堆栈大小(以兆字节为单位)”并将其设置为512.
    3. 保存首选项并关闭TkECLiPSe。
    4. 下次运行TkECLiPSe时,堆栈大小将设置为512 Mb。