问题标签 [prolog-defaulty]

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 投票
3 回答
96 浏览

prolog - 控制 Prolog 变量值选择

早期问题的启发,我尝试实现一些可以枚举布尔表达式的可能性的东西。但是,我在选择变量时遇到了麻烦。这是我的预期结果:

这是我的代码:

即使对于这个简单的案例,这也不能满足我的要求:

所以,我可以看到问题出在哪里,即在通过split(Y, YP)Prolog 的过程中已经用尽了前两个子句,所以它再次结束,基本上split(X^Y, ...)统一了 myY和。X'^Y'我只是不确定我需要做什么来关闭这条路径,除非我一开始就有结构^/2

我也希望它可以与嵌套结构一起使用,所以我不能仅仅消除分支的递归处理。

编辑:没有运营商

如果op/3困扰您,请考虑以下公式:

这将是这种情况下的代码:

请记住,我仍然希望它可以与诸如此类的递归公式一起使用and(and(X,Y),and(Y,Z))

0 投票
3 回答
238 浏览

prolog - 合并生成器结果并将结果写入流

目前我可以生成表达式树。

其中 N 是树的节点数。

我也可以独立生成序列号。

我还可以生成和输出表达式,但不能使用正确的序列号


请注意,序列号都是0000001.

这是生成选择点,所以我修改它使用forall

这仍然是错误的。


我寻求的输出是

其中每个序列号都是唯一的,并且从0or开始是连续的,1并且可以写入文件。对于此示例,流设置user_output为简化问题。

如果我将序列号生成器添加到组合中

序列号现在是正确的,但是永远不会生成新的表达式,因为序列号生成器正在使用选择点来生成下一个序列号,因此谓词sequence_number不会回溯到generate_expression谓词以获取新表达式。

那么,我可以使用两个连续依赖回溯的生成器吗?如果是这样,怎么做?

补充

这与我之前关于树生成器的问题有关。
我知道这应该使用来完成,并且应该更改数据结构,但是当我试图理解这一点时,以这种方式看待它更容易理解。

相关的 SO 问题

0 投票
2 回答
704 浏览

prolog - 在 Prolog 中设置未绑定变量的类型

我试图找到一种在变量绑定到值之前设置变量类型的方法。不幸的是,integer/1谓词不能用于此目的:

我写了一个谓词is_int,尝试提前检查类型,但它没有按我预期的那样工作。它允许将变量绑定到原子而不是整数:

是否仍然可以设置尚未绑定到值的变量的类型?

0 投票
1 回答
557 浏览

prolog - Prolog - 替换和评估

你好编程的好人。

与命令式编程相比,逻辑编程总是令人着迷。由于追求逻辑编程的未知性,在遇到算术表达式时存在一些问题。

这是我到目前为止所做的代码。

以添加操作为例:

我想要实现的是,如果表达式中的原子只能由给定的变量和值替换,那么 Result 只是上面显示的示例(结果 = 11)的数字。否则,结果只是表达式本身。我的代码问题出在某个地方,我可以弄清楚。那么,请有人可以帮助我吗?谢谢你。

0 投票
1 回答
106 浏览

prolog - prolog catch all 子句只有在没有其他子句时才有效

我有一个谓词将模态逻辑公式与其负范式联系起来。除了模态运算符、合取和析取之外的所有连接词都被消除了,并且否定被尽可能地推到表达式的叶子中。

rewrite/2✱ 谓词有一个包罗万象的子句,rewrite(A, A).文本上是 last。有了这个包罗万象的子句,就可以提取否定范式的公式。在这个例子中,e是一个像 Łukasiewicz 表示法一样的双条件连接词,4并且7是模态逻辑中的变量(因此是 Prolog 常量)。

Z与负范式的公式统一。

但是,rewrite(<some constant>, <some constant>)总是成功,我不希望它成功。包罗万象的条款真的应该是一个包罗万象的条款,而不是如果另一个条款适用的话可能会触发的东西。

我尝试用受rewrite(A, A).保护的版本替换:

我认为当且仅当A 不是由具有特殊含义的原子/构造函数领导时,这将阻止包罗万象的条款适用。但是,在进行更改后,rewrite如果递归调用,总是会失败。

什么是设置捕获所有子句的正确方法。

✱ 方案全文供参考:

0 投票
2 回答
54 浏览

prolog - 如何编写 Prolog - 定义基本运算符?

我对 Prolog 还很陌生,我想创建一个行为如下的谓词

这是在做:1 + (4 - 1) = 4

我熟悉谓词,但我不知道从哪里开始编写 add//2 谓词/运算符。

非常感谢任何帮助或建议。