问题标签 [clpb]
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.
list - Prolog:比较两个列表中的各个元素
我有 2 个列表[x1, x2, ...xn]
和[y1, y2, ...yn]
表单{0, 1}^n
。
我想生成一个新列表[a1, a2 ... an]
,使得ai = xi AND yi
对于i
从 1 到 n 的每一个(即,如果 x1 = y1 = 1 则 a1 = 1 或如果 x1 = 1,y1 = 0,则 a1 = 0)
如何使用递归实现谓词?
prolog - CLPB 的不良特性
library(clpb)
目前在 SICStus(原始版本)和 SWI(按 mat)中可用。让我很快进入本质:
所以这是一个类似的问题,因为它存在于library(clpfd)
.
在这种情况下该怎么办?
更新:在library(clpfd)
垫子中,现在有用# /1
于此目的的函子。理想情况下,伴随着运算符声明op(150,fx,#)
,我们现在可以编写:
为了确保完整的代数性质,必须声明:
现在,不明确的变量(因此,要么是整数,要么是表达式)会产生实例化错误:
prolog - Prolog:假设项目可以恰好在两个集合中的一个中,并且集合大小已知,因此推论
我一个房间有5个人。我将编写规则来确定人们是快乐还是悲伤。然而,在我开始之前,我已经知道——在这 5 个中——恰好有 3 个是快乐的,2 个是悲伤的(没有一个可以两者兼得)。因此,应该可以基于此进行推断:如果 - 无论如何 - 我知道三个快乐的人是谁,那么我可以推断出两个悲伤的人,反之亦然。
到目前为止,我得到的如下:
当被问到时happy(X)
,Prolog 会给我 Roy、Steve 和 Jack,因为它已经知道这两个悲伤的人是谁。问题:我无法以sad/1
相同的方式定义规则,因为与happy/1
. 我希望能够添加规则,以使上述示例中的结果保持不变,但以下初始化会将 Bob 和 Tim 列为悲伤:
有没有更好的方法我应该考虑这个?重要的是,我稍后将能够继续为sad/1
和编写更多规则happy/1
,除了应该可以根据 5 分为 3 快乐和 2 悲伤的知识进行推理之外,还添加了额外的逻辑。
prolog - 布尔公式的蛮力 Prolog SAT 求解器
我正在尝试编写一个算法来天真地寻找布尔公式(NNF,但不是 CNF)的模型。
我拥有的代码可以检查现有模型,但是当被要求查找模型时它会失败(或无法完成),似乎是因为它生成了无限多member(X, Y)
的解决方案[X|_], [_,X|_], [_,_,X|_]...
我到目前为止是这样的:
是否有更好的数据结构F
或其他方式可以切断部分实例化的列表?
编辑:添加定义和示例。
prolog - 在约束成立和不成立的情况下生成随机值
我有以下内容:
length_conindexes_conrandomvector/3
用于生成 1 和 0 的随机向量,其中 conindexes 位置中的元素为 1。
length_conindexes_notconrandomvector/3
用于生成一个随机向量,其中并非所有的索引都是 1。
我觉得我已经用这个repeat
命令“破解”了。做这个的最好方式是什么?如果我使用标签,那么这些值不会是随机的?如果经常违反约束,那么搜索将非常低效。做这个的最好方式是什么?
list - PROLOG Undefined procedure ERROR(两个参数递归)
大家好,我需要帮助。此代码必须递归地提供两个单独数字的计数。但是,我无法提供带有 2 个参数的递归。我想MRec
并且NRec
在任何情况下都是无效的。任何帮助将不胜感激。现在谢谢...
prolog - 使用 prolog 进行电路验证
我已获得用于验证 2 位全加器电路的功能和谓词。这是我到目前为止所理解的:-
一个函数 signal(t),其中 t 是终端,信号取值为 1 或 0。
函数 type(x),其中 type 是一个电路元素, type(x) 可以取值 xor,并且,或
函数 out(x) 表示门 x 的输出,而 in(n, x) n 是输入端。
对于门谓词给出为
对于这些,我不确定如何将它们转换为 prolog 代码,也不了解 prolog 函数如何返回某些东西(我认为结果也必须作为参数提供)。
任何帮助都会非常有用!
prolog - prolog 可以用来确定无效的推理吗?
如果我有两个前提如下:
- a -> c (a 暗示 c)
- b -> c (b 暗示 c)
并得出一个结论:
- a -> b (因此 a 意味着 b),
那么结论可以被证明是无效的,因为:
当 a 为真且 c 为真时,a -> c 对语句#1 有效,而当 b 为假且 c 为真时,b -> c 对语句#2 有效。当 a 为真且 b 为假时,这将导致 a -> b,这与语句#3 直接矛盾。
或者,每个带有真值表的证明,该真值表包含一条表示前提为真但结论为假的行:
我的问题是:“有没有办法使用 prolog 来证明陈述 #1 和 #2 的断言与陈述 #3 的结论相矛盾?如果是这样,那么有什么清晰简洁的方法可以做到这一点?”
prolog - 使用 prolog 将结果打印到 txt 文件中
我正在使用 Prolog 和 clpd 来解决布尔问题。我有下面这样的规则:
是否可以将结果打印到文件中?我能怎么做?
prolog - 计算 CSP 中的解决方案
我正在使用序言,我有这个代码:
如果我想计算所有解决方案,我该怎么做?我已经阅读了关于 clpb 中使用的 sat_count(+Expr, -Count) 但我无法在没有错误的情况下实现它