问题标签 [sicstus-prolog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5727 浏览

prolog - Prolog powerset 谓词

我希望定义一个谓词 powerset(X, P),当 P 是 X 的幂集时它为真。无论 P 是否接地,都应该有效。

0 投票
3 回答
230 浏览

prolog - Prolog 中回溯期间的状态传播

假设我在 Prolog 中有一个简单的程序,它正在搜索某个状态空间:

我知道:

  • generate(State, NewState)NewState正在为任何给定的生产至少一个State
  • 整个状态空间是有限的

我想修改search谓词以确保它始终能够在有限时间内进行检查。所以我写了类似的东西:

这是有效的,但它在回溯期间丢失了计算状态,所以现在我有一个空间大小最大高度的搜索树。

有没有办法在回溯期间传播状态而不会丢失任何计算信息?我想要一个带有 O(space_size) 节点的整个搜索树。可能吗?

编辑: 似乎我应该使用它assert/[1,2]来动态创建将用作全局内存的新子句。

0 投票
1 回答
1056 浏览

map - Prolog 关联列表

我正在 Prolog 中编写一个简单的程序安全检查器,我需要一个数据结构来保存变量估值。由于我想检测我什么时候再次访问同一个状态,所以这个结构必须支持一些合理的比较语义,所以我可以将访问过的状态存储在集合中。

library(avl)具有方便的 getter/setter 接口。问题是,持有相同映射的 AVL 可以采取多种形式。因此,如果它们的 AVL 表示不同,则两个相同的状态将被认为是不同的。

在有序列表中保存映射的结构将没有这个问题。但是,我在 Sicstus 文档中找不到类似的东西。是否有任何标准结构可以满足我的需要,或者我必须自己实现它?

0 投票
3 回答
180 浏览

performance - 是否有库/技术来收集 Prolog 中最佳子句排序的统计信息?

我正在编写一个程序,我需要查看字符串是否与特定模式匹配。现在我已经在 Prolog 中实现了这个作为规则 matchPattern(S),有超过 20 种不同的定义。

我最终通过模式检查谓词将所有二进制字符串运行到​​一定长度。该程序相当慢(正如Prolog通常那样),并且由于有很多不同的定义,我理想地希望对它们进行排序,以便最匹配的那些在排序中最早,因此由Prolog首先匹配,避免回溯尽我所能。

我现在正在使用 SWI Prolog,但我可以访问 SICStus,所以我愿意使用它或我可以免费获得的任何 Prolog 解释器。

0 投票
1 回答
51 浏览

plugins - 如何在位于其他目录的模块中找到谓词的声明

对于 Prolog 插件,例如 SICStus spiderproDTPDT,eclipse 编辑器中的“查找声明”无法在位于不同目录的模块中找到谓词定义。

例如,

databaseB.pl 顶部没有模块的导入语句。所以上述所有插件都找不到 moduledatabase和 predicate的定义set_dbaccess。当然,对符号的 F3 操作database, set_dbaccess也会失败。

有什么方法可以解决这个问题吗?

0 投票
2 回答
230 浏览

eclipse - Juno 的 SICStus Eclipse SPIDER 菜单中的“编译 Prolog 代码”(Alt+K) 发生了什么?

我刚刚从 Eclipse Indigo 升级到 Classic Eclipse 4.2 Juno,通过以下 URL 下载:ftp: //ftp.uninett.no/pub/eclipse/eclipse/downloads/drops4/R-4.2-201206081400/eclipse-SDK-4.2 -win32-x86_64.zip

我在 Eclipse Juno 中安装了 SPIDER,来自这个更新 URL: http ://www.sics.se/sicstus/update/

现在,当我启动 Juno 时,我不再能够使用快捷键 ALT+K 来编译当前的 Prolog 代码。该选项也从 SPIDER 提供的 SICStus 菜单中删除。

任何人都可以解释为什么会发生这种情况,或者如何处理它?我想编译我的代码而不需要大量输入!谢谢。我尝试过使用与以前相同的工作区和全新的工作区。

编辑:我在 Win7 64 位系统上,安装了全新的 Juno Classic(SPIDER 插件除外)和全新的工作区。

EDIT2:Alt+K 似乎出现在第一个新创建或打开的文件中,但是当我对其他 *.pl 文件执行“文件->打开”时,SICStus 菜单上的 Alt+K 选项“移动”仅适用于这个新文件(不再用于其他文件)。这种行为对我来说似乎很奇怪。

EDIT3:在 Per Mildner 的一些支持答案之后,我能够得到这个“几乎可以工作”,例如对于新打开的文件,一次一个。我现在正在等待他从八月假期回来,或者等待其他人为这个奇怪的问题提供更好和更永久的解决方案。

0 投票
2 回答
158 浏览

debugging - Sicstus Prolog:在调试期间显示当前绑定

我对 Prolog 很陌生,一直在使用 Sicstus 来帮助调试我的代码。在使用 单步执行查询时,有没有办法查看所有绑定trace/0?或者在这些步骤中是否有其他方法可以打印出来?

0 投票
1 回答
209 浏览

prolog - 谓词在 Prolog (SICStus) 中无法按预期工作

我对 prolog 谓词有疑问。

我有一个棋盘,我想检查一个玩家何时没有值在 1 到 10 之间的棋子,称为移动棋子。代码如上所示:

在这个例子中,结果应该是“是”,但结果是“否”。为什么?任何人都可以得到代码中的错误?

问候

0 投票
1 回答
259 浏览

get - 需要在prolog中从系统中获取当前年份

我是 stackoverflow 和 Prolog 的新手。

我想获取当前年份并将其用于“BD > currentYear”之类的比较中。从我一直在做的研究来看,我认为我需要使用'use_module(library(system))',但我不知道如何......

你能帮助我吗?

谢谢!

0 投票
5 回答
3987 浏览

prolog - Prolog 约束处理 : Packing Squares

我正在尝试解决 prolog 中的约束处理问题。

我需要在 10x10 的网格中打包 4 个 5x5、4x4、3x3 和 2x2 的正方形。它们可能不会重叠。

我的变量如下所示:

其中 X 为 5、4、3 或 2。索引 i 表示行,域表示网格中的列。

我的第一个约束尝试定义正方形的宽度和高度。我这样表述:

这样可能的点就被限制在彼此之间的 X 行和列内。然而,Prolog 停止这些约束并给出以下结果:

所以它停在那里,甚至没有检查其他方格。我的约束很可能太紧了,但我不明白为什么或如何。有什么建议么?