问题标签 [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.
prolog - Prolog powerset 谓词
我希望定义一个谓词 powerset(X, P),当 P 是 X 的幂集时它为真。无论 P 是否接地,都应该有效。
prolog - Prolog 中回溯期间的状态传播
假设我在 Prolog 中有一个简单的程序,它正在搜索某个状态空间:
我知道:
generate(State, NewState)
NewState
正在为任何给定的生产至少一个State
- 整个状态空间是有限的
我想修改search
谓词以确保它始终能够在有限时间内进行检查。所以我写了类似的东西:
这是有效的,但它在回溯期间丢失了计算状态,所以现在我有一个空间大小最大高度的搜索树。
有没有办法在回溯期间传播状态而不会丢失任何计算信息?我想要一个带有 O(space_size) 节点的整个搜索树。可能吗?
编辑:
似乎我应该使用它assert/[1,2]
来动态创建将用作全局内存的新子句。
map - Prolog 关联列表
我正在 Prolog 中编写一个简单的程序安全检查器,我需要一个数据结构来保存变量估值。由于我想检测我什么时候再次访问同一个状态,所以这个结构必须支持一些合理的比较语义,所以我可以将访问过的状态存储在集合中。
library(avl)
具有方便的 getter/setter 接口。问题是,持有相同映射的 AVL 可以采取多种形式。因此,如果它们的 AVL 表示不同,则两个相同的状态将被认为是不同的。
在有序列表中保存映射的结构将没有这个问题。但是,我在 Sicstus 文档中找不到类似的东西。是否有任何标准结构可以满足我的需要,或者我必须自己实现它?
performance - 是否有库/技术来收集 Prolog 中最佳子句排序的统计信息?
我正在编写一个程序,我需要查看字符串是否与特定模式匹配。现在我已经在 Prolog 中实现了这个作为规则 matchPattern(S),有超过 20 种不同的定义。
我最终通过模式检查谓词将所有二进制字符串运行到一定长度。该程序相当慢(正如Prolog通常那样),并且由于有很多不同的定义,我理想地希望对它们进行排序,以便最匹配的那些在排序中最早,因此由Prolog首先匹配,避免回溯尽我所能。
我现在正在使用 SWI Prolog,但我可以访问 SICStus,所以我愿意使用它或我可以免费获得的任何 Prolog 解释器。
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 的一些支持答案之后,我能够得到这个“几乎可以工作”,例如对于新打开的文件,一次一个。我现在正在等待他从八月假期回来,或者等待其他人为这个奇怪的问题提供更好和更永久的解决方案。
debugging - Sicstus Prolog:在调试期间显示当前绑定
我对 Prolog 很陌生,一直在使用 Sicstus 来帮助调试我的代码。在使用 单步执行查询时,有没有办法查看所有绑定trace/0
?或者在这些步骤中是否有其他方法可以打印出来?
prolog - 谓词在 Prolog (SICStus) 中无法按预期工作
我对 prolog 谓词有疑问。
我有一个棋盘,我想检查一个玩家何时没有值在 1 到 10 之间的棋子,称为移动棋子。代码如上所示:
在这个例子中,结果应该是“是”,但结果是“否”。为什么?任何人都可以得到代码中的错误?
问候
get - 需要在prolog中从系统中获取当前年份
我是 stackoverflow 和 Prolog 的新手。
我想获取当前年份并将其用于“BD > currentYear”之类的比较中。从我一直在做的研究来看,我认为我需要使用'use_module(library(system))',但我不知道如何......
你能帮助我吗?
谢谢!
prolog - Prolog 约束处理 : Packing Squares
我正在尝试解决 prolog 中的约束处理问题。
我需要在 10x10 的网格中打包 4 个 5x5、4x4、3x3 和 2x2 的正方形。它们可能不会重叠。
我的变量如下所示:
其中 X 为 5、4、3 或 2。索引 i 表示行,域表示网格中的列。
我的第一个约束尝试定义正方形的宽度和高度。我这样表述:
这样可能的点就被限制在彼此之间的 X 行和列内。然而,Prolog 停止这些约束并给出以下结果:
所以它停在那里,甚至没有检查其他方格。我的约束很可能太紧了,但我不明白为什么或如何。有什么建议么?