问题标签 [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 - 如何指定变量域中值的自定义顺序?
假设我有一个变量V
,并且值V
可以是 range 中的任何数字0..5
。但是,某些值比其他值更受欢迎,因此它将帮助我将域指定V
为有序序列。
我可以在 SICStus Prolog 中执行此操作吗?
例子:
我阅读了手册,但没有找到任何有用的东西。我可以通过自定义标签来解决问题(即,将 V 的域转换为列表,对其进行排序并将值分配给V
),但我预计性能会更差。
json - 在烧瓶 0.9 中解析 json 请求
(对于任何后端开发,我都是一个完整的初学者,所以如果任何术语使用错误,我深表歉意)
我有一些控制画布游戏的 javascript,并且我有一个可以解决游戏的序言规划器。我现在正在尝试连接两者并设置了一个烧瓶服务器,它可以成功调用 prolog,获取正确的计划并将其发送回 javascript。我真的很难从 javascript 中获得正确的输入。
Javascript:
烧瓶服务器
我已经看到有关此的其他问题,实际上我发布的尝试来自flask request.json order,但我不断收到 400(错误请求)。我猜从那以后烧瓶改变了?我知道它正确发送了 json,因为如果我不尝试触摸它,我会在浏览器中收到成功消息,所以纯粹是我无法访问它的字段或找到任何示例。
prolog - 使用变量(Sel)和值(枚举)的 Sicstus Prolog 自定义标签
假设我将以下域变量列表传递给标签谓词:
对于变量(Sel):此外,我希望标签可能首先选择所有 Y,然后再继续 X。或者更复杂:从 X 或 Y 开始,如果与 Y 相比有更多未标记,则继续标记 X,反之亦然。
对于值(枚举):更复杂的是,我可能希望根据它是 X 还是 Y 来使用不同的策略。
我的第一次尝试是使用属性变量并向每个变量添加更多信息:
并且内部变量(Sel)和值(Enum)我可以通过使用这个属性来搜索和选择。
但是由于 fd_var 已经是一个属性变量,因此这种尝试效果不佳。
所以我的问题是:使用属性变量是解决此类任务的正确策略吗?有没有其他方法可以做到这一点?
这只是一个简化的例子。我需要大约 10 种不同的变量类型,而不仅仅是这里显示的两种。
prolog - clpfd 和 fdbg 的使用
我有以下使用 clpfd 的 Prolog 代码:
如果我运行 go/2 谓词,它会按预期工作:
但是,如果我现在启用 fdbg-debugger,我不会得到 Y 的值:
这是 fdbg 库中的错误还是我做错了什么?
prolog - 如何使用 clpfd:automaton 限制 SICStus Prolog 中的计数器值?
我想实现一个非常简单的自动机,它限制一和零列表中连续 1 的数量(例如 [0,1,1,0,1,1,1])。
我的自动机看起来像这样:
如何将C
指定计数器的约束添加C <= Allowed
到上面的 Prolog 代码中?
stream - Prolog 错误:“预期的流,但找到 '$stream' ...”
我正在开发一个大学作业程序,目前我正试图从一个写在文件上的绑架程序中写一些否认作为完整性约束,但我遇到了一些问题。
我的任务谓词如下所示:
他们会通过以下方式进行查询:
问题是,如果我将它们放在一个单独的文件中(使用这些谓词而不是其他任何东西),它们似乎可以工作,但是当在程序中使用时(我无法在此处发布的 3000 行 Prolog ......)我明白了错误:
我检查了,我可以确认谓词没有被覆盖......我真的不明白这是怎么发生的。
非常欢迎任何关于我可能出错的地方的建议或线索!
非常感谢,大卫。
c - 从 C 创建序言列表
我有一个 C 程序作为 Sicstus Prolog 运行时的前端。我正在尝试在 C 中创建一个列表,将其填写并传递给 Prolog 运行时。我已经查看了 C 库,但我没有找到任何有关如何执行此操作的信息。我想这不是一个单独的函数调用,而是一个组合(?)
我还看到 C 库中有几个与此相关的函数调用,例如(SP_put_list()、SP_put_list_codes()、SP_put_list_n_bytes()、SP_put_list_n_codes())
我要创建的列表是传递给 labeling/2 的选项列表,例如 [leftmost,step,up,all],但我想在运行时创建并填写此列表,并将其传递给 Sicstus Prolog。
prolog - 如何在 SICStus Prolog 中恢复使用 copy_term/3 收集的约束?
文件说
copy_term(+Term, -Copy, -Body)
制作一个副本,Term
其中所有变量都已被新变量替换,这些新变量在新创建的术语之外无处出现。如果Term
包含属性变量,Body
则与一个术语统一,以便执行Body
将恢复 中变量的等效属性Copy
。
我之前确认了对某些变量的数值 CLP(R) 约束,并且在某些时候我使用 copy_term/3 收集这些约束。后来,当我尝试使用'call(Body)'恢复约束时,我在表单的参数中得到一个“实例化错误”[nfr:resubmit_eq(...)]
这是一个演示问题的简化示例:
结果是:
我的问题是:如何恢复Body
over的约束New
?我一直找不到具体的例子。
swi-prolog - SWI/CLP(FD) 中的可达性约束
我试图通过解决节点和弧的存在约束来确定有向图的形状,例如,二进制变量V1V2
是1
是否存在从节点V1
到的弧V2
。我想表达可达性约束(或者,找到一个传递闭包),例如,要求图是连接的,或者有一条从一个给定节点到另一个给定节点的路径。
我已经看到 SICStus Prologfd_closure
用于此目的,但我在 SWI Prolog 中找不到类似的东西。我应该使用CHR吗?我一直在查看弧/路径一致性示例,但我不确定我是否在寻找正确的方向。