问题标签 [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.
prolog - 控制 Prolog 变量值选择
受早期问题的启发,我尝试实现一些可以枚举布尔表达式的可能性的东西。但是,我在选择变量时遇到了麻烦。这是我的预期结果:
这是我的代码:
即使对于这个简单的案例,这也不能满足我的要求:
所以,我可以看到问题出在哪里,即在通过split(Y, YP)
Prolog 的过程中已经用尽了前两个子句,所以它再次结束,基本上split(X^Y, ...)
统一了 myY
和。X'^Y'
我只是不确定我需要做什么来关闭这条路径,除非我一开始就有结构^/2
。
我也希望它可以与嵌套结构一起使用,所以我不能仅仅消除分支的递归处理。
编辑:没有运营商
如果op/3
困扰您,请考虑以下公式:
这将是这种情况下的代码:
请记住,我仍然希望它可以与诸如此类的递归公式一起使用and(and(X,Y),and(Y,Z))
。
prolog - 合并生成器结果并将结果写入流
目前我可以生成表达式树。
其中 N 是树的节点数。
我也可以独立生成序列号。
我还可以生成和输出表达式,但不能使用正确的序列号
请注意,序列号都是0000001
.
这是生成选择点,所以我修改它使用forall
这仍然是错误的。
我寻求的输出是
其中每个序列号都是唯一的,并且从0
or开始是连续的,1
并且可以写入文件。对于此示例,流设置user_output
为简化问题。
如果我将序列号生成器添加到组合中
序列号现在是正确的,但是永远不会生成新的表达式,因为序列号生成器正在使用选择点来生成下一个序列号,因此谓词sequence_number
不会回溯到generate_expression
谓词以获取新表达式。
那么,我可以使用两个连续依赖回溯的生成器吗?如果是这样,怎么做?
补充
这与我之前关于树生成器的问题有关。
我知道这应该使用dcg来完成,并且应该更改数据结构,但是当我试图理解这一点时,以这种方式看待它更容易理解。
相关的 SO 问题
prolog - 在 Prolog 中设置未绑定变量的类型
我试图找到一种在变量绑定到值之前设置变量类型的方法。不幸的是,integer/1
谓词不能用于此目的:
我写了一个谓词is_int
,尝试提前检查类型,但它没有按我预期的那样工作。它允许将变量绑定到原子而不是整数:
是否仍然可以设置尚未绑定到值的变量的类型?
prolog - Prolog - 替换和评估
你好编程的好人。
与命令式编程相比,逻辑编程总是令人着迷。由于追求逻辑编程的未知性,在遇到算术表达式时存在一些问题。
这是我到目前为止所做的代码。
以添加操作为例:
我想要实现的是,如果表达式中的原子只能由给定的变量和值替换,那么 Result 只是上面显示的示例(结果 = 11)的数字。否则,结果只是表达式本身。我的代码问题出在某个地方,我可以弄清楚。那么,请有人可以帮助我吗?谢谢你。
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
如果递归调用,总是会失败。
什么是设置捕获所有子句的正确方法。
✱ 方案全文供参考:
prolog - 如何编写 Prolog - 定义基本运算符?
我对 Prolog 还很陌生,我想创建一个行为如下的谓词
这是在做:1 + (4 - 1) = 4
我熟悉谓词,但我不知道从哪里开始编写 add//2 谓词/运算符。
非常感谢任何帮助或建议。