1

我们必须在几个有约束的环境(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

4

1 回答 1

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. 像往常一样执行查询。

但我怀疑你的程序永远运行并吃掉所有内存,所以这一切最终可能无济于事。

编辑。更新了 TkECLiPSe 的说明:

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