问题标签 [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.

0 投票
2 回答
186 浏览

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)

如何使用递归实现谓词?

0 投票
2 回答
225 浏览

prolog - CLPB 的不良特性

library(clpb)目前在 SICStus(原始版本)和 SWI(按 mat)中可用。让我很快进入本质:

所以这是一个类似的问题,因为它存在于library(clpfd).

在这种情况下该怎么办?

更新:在library(clpfd)垫子中,现在有用# /1于此目的的函子。理想情况下,伴随着运算符声明op(150,fx,#),我们现在可以编写:

为了确保完整的代数性质,必须声明:

现在,不明确的变量(因此,要么是整数,要么是表达式)会产生实例化错误:

0 投票
2 回答
113 浏览

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 悲伤的知识进行推理之外,还添加了额外的逻辑。

0 投票
3 回答
754 浏览

prolog - 布尔公式的蛮力 Prolog SAT 求解器

我正在尝试编写一个算法来天真地寻找布尔公式(NNF,但不是 CNF)的模型。

我拥有的代码可以检查现有模型,但是当被要求查找模型时它会失败(或无法完成),似乎是因为它生成了无限多member(X, Y)的解决方案[X|_], [_,X|_], [_,_,X|_]...

我到目前为止是这样的:

是否有更好的数据结构F或其他方式可以切断部分实例化的列表?

编辑:添加定义和示例。

0 投票
1 回答
107 浏览

prolog - 在约束成立和不成立的情况下生成随机值

我有以下内容:

length_conindexes_conrandomvector/3用于生成 1 和 0 的随机向量,其中 conindexes 位置中的元素为 1。

length_conindexes_notconrandomvector/3用于生成一个随机向量,其中并非所有的索引都是 1。

我觉得我已经用这个repeat命令“破解”了。做这个的最好方式是什么?如果我使用标签,那么这些值不会是随机的?如果经常违反约束,那么搜索将非常低效。做这个的最好方式是什么?

0 投票
3 回答
298 浏览

list - PROLOG Undefined procedure ERROR(两个参数递归)

大家好,我需要帮助。此代码必须递归地提供两个单独数字的计数。但是,我无法提供带有 2 个参数的递归。我想MRec并且NRec在任何情况下都是无效的。任何帮助将不胜感激。现在谢谢...

0 投票
1 回答
288 浏览

prolog - 使用 prolog 进行电路验证

我已获得用于验证 2 位全加器电路的功能和谓词。这是我到目前为止所理解的:-

一个函数 signal(t),其中 t 是终端,信号取值为 1 或 0。

函数 type(x),其中 type 是一个电路元素, type(x) 可以取值 xor,并且,或

函数 out(x) 表示门 x 的输出,而 in(n, x) n 是输入端。

对于门谓词给出为

对于这些,我不确定如何将它们转换为 prolog 代码,也不了解 prolog 函数如何返回某些东西(我认为结果也必须作为参数提供)。

任何帮助都会非常有用!

0 投票
2 回答
355 浏览

prolog - prolog 可以用来确定无效的推理吗?

如果我有两个前提如下:

  1. a -> c (a 暗示 c)
  2. b -> c (b 暗示 c)

并得出一个结论:

  1. a -> b (因此 a 意味着 b),

那么结论可以被证明是无效的,因为:

当 a 为真且 c 为真时,a -> c 对语句#1 有效,而当 b 为假且 c 为真时,b -> c 对语句#2 有效。当 a 为真且 b 为假时,这将导致 a -> b,这与语句#3 直接矛盾。

或者,每个带有真值表的证明,该真值表包含一条表示前提为真但结论为假的行:

具有真前提和假结论的真值表

我的问题是:“有没有办法使用 prolog 来证明陈述 #1 和 #2 的断言与陈述 #3 的结论相矛盾?如果是这样,那么有什么清晰简洁的方法可以做到这一点?”

0 投票
1 回答
690 浏览

prolog - 使用 prolog 将结果打印到 txt 文件中

我正在使用 Prolog 和 clpd 来解决布尔问题。我有下面这样的规则:

是否可以将结果打印到文件中?我能怎么做?

0 投票
1 回答
405 浏览

prolog - 计算 CSP 中的解决方案

我正在使用序言,我有这个代码:

如果我想计算所有解决方案,我该怎么做?我已经阅读了关于 clpb 中使用的 sat_count(+Expr, -Count) 但我无法在没有错误的情况下实现它