问题标签 [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 - 命题逻辑中的公式
我正在尝试制作谓词以验证给定输入是否代表公式。
我只能使用命题原子,如 p、q、r、s、t 等。我必须测试的公式如下:
wff
如果给定的结构是公式,我已经做出了返回 true的谓词,否则返回 false。此外,我不必在公式中使用变量,只需使用下面提到的命题原子。
当我介绍一个像这样的测试时
wff(and(q, imp(or(p, q), neg(p)))).
,调用会返回true
和false
值。你能告诉我为什么会这样吗?
prolog - Prolog:如何执行“检查(a++b++c++d 等于 d++a++c++b)-> 是”
让我们定义自定义运算符 - 顺其自然++
,equals
而事实:
我尝试制作谓词,让它成为check/1
,在以下所有情况下都将返回 true:
返回
如何在 Prolog 中实现这一点?(代码片段,请。有可能吗?我错过了什么吗?)
首选 Gnu-Prolog,但也可以接受 SWI-Prolog。
PS请将代码视为“伪代码”草案,不要关心小的语法问题。
PPS '++' 才刚刚开始。我想添加更多运算符。这就是为什么我担心将东西放入列表可能不是一个好的解决方案。
此外
此外,如果可以进行查询,那就太好了(但是,这部分不是必需的,如果您能够回答第一部分,那就太好了)
可能的结果之一(感谢@mat 向其他人展示)
我主要寻找问题第一部分的解决方案 - “是/否”检查。
X,Y 的第二部分将是很好的补充。其中 X,Y 应该是简单的原子。对于上述 X,Y 的示例域,指定:domain(X,[a,b,c]),domain(Y,[a,b,c])
.
macros - 术语列表的术语扩展
假设我想要有许多都遵循相同模式的规则。当我想通过明确列出所有可能的第一个参数来避免非确定性行为时,我遇到了这种情况。然而,我知道,对于某些可能性,我需要做同样的事情。处理它的一种方法是在最后有一个包罗万象的条款:
但这不是很好,因为我实际上不知道是否有意外的输入,或者我的程序是否出错。为了避免这种情况,我也可以说
但同样,我现在正在与 Prolog 的确定性行为作斗争,并在争论成立时进行索引。
所以,相反,我做这样的事情:
问题是,我试图找到这样的现有代码,但我找不到。是因为我做错了什么吗?有没有更好的方法来解决这个问题?还是完全绕过它?
我不介意回答说“您正在解决错误的问题”。
编辑:一些谷歌搜索实际上让我从 SWI-Prolog 文档中找到了这个非常相似的例子:
http://www.swi-prolog.org/pldoc/man?section=ext-dquotes-motivation (在最底部)
prolog - Prolog - 简化导数
所以我这个学期刚开始使用 Prolog,并完成了一个非常基础的作业d(function, variable, derivative)
,我这样做了:
我知道这并不完整,但它涵盖了练习中所需的所有任务。
然而,
?- d((x*x+2*x+3)/(3*x),x,R).
导致
R = ((1*x+x*1+ (0*x+2*1)+0)* (3*x)- (x*x+2*x+3)* (0*x+3*1))/ (3*x* (3*x)).
这看起来一点也不漂亮。is/2不幸的是不喜欢我的 x 因为它不是一个数字......
是否有一个简单的解决方案来实现更清洁的结果?
prolog - 将整数约束在集合中
我正在使用in/1
谓词尝试约束一个整数以从某个集合中获取值:
我没想到这会起作用,因为[...]
是列表符号。我当然可以使用:
但这非常冗长。以下也有效:
并且有点短,但仍然很丑。
该文档指出:
Var 是 Domain 的一个元素。域是以下之一:
仅由整数组成的整数单例集。
我试过搜索什么是单例集(Prolog newbie here),但我在网上找不到任何东西。有没有更简洁的方式来表达我的约束?
prolog - Prolog中的树叶遍历
我在训练 prolog 练习时遇到了一些问题,下面的问题是,
谓词定义了树的含义,并且可以用来测试一个词是否是树:
通过使用此谓词,您可以在树中找到一个元素(称为叶子):
所以这里有两个问题,首先是编写谓词elements/2
,它产生一个元素列表,因为它们在第一个参数中以从左到右的顺序在树的叶子中找到!
第二个是写一个谓词 same content/2
,当两棵树以相同的顺序包含相同的元素时,它就成功了!重复很重要。
希望能得到任何擅长prolog的人可以帮助我,非常感谢。
prolog - PROLOG 中的深度逆向 - 列表
嘿,我正在尝试创建一个谓词,用于在 PROLOG 中的嵌套列表上生成深度反向。
目前我得到了这个谓词
结果如下所示:
问题是,内部列表没有反转。它应该如下所示:
谢谢你的帮助。
prolog - CLPFD domain declaration with in or inequalities
So far so good!
Now let's imagine that the sup bound of X
depends on Y in 100..200
.
The domain of X
propagates correctly to 1..200
, with the constraint between X
and Y
.
But…</p>
I thought that in
was equivalent to the inequalities declaration, but it apparently is not.
Is there any hidden reason as to why in
requires that both bounds are ground?
prolog - 使用 CLP(FD) 对任意长度子列表的约束
我正试图围绕 CLP(FD)。这是一个简单的例子,我不确定最惯用的方法。假设我们有一个数字列表 ( L
),其中一些数字已经填充,如下所示。
我想说的是,一个固定数字的左右数字必须加总该数字。上述情况的可能解决方案是:
当然,还有其他解决方案。我的第一种方法是:
- 搜索第一个枢轴号;
- 获取pivot的左右子列表;
Append
两个列表;- 使用 predicate
sum/3
,将结果列表约束为#=
枢轴。
这会是意识形态的吗?我错过了更明显的东西吗?
2 级。我认为谓词sum/3
完成了大部分工作。让我们稍微改变一下问题:
枢轴左侧和右侧的连续 1 字符串必须求和到枢轴。
所以鉴于此:
一个可能的解决方案是:
现在更棘手了……我想说的是,枢轴 N 的附加左右子列表必须包含长度为 N 的 1 的子列表。这有意义吗?我将如何使用 CLP(FD) 来表达这些观点?
prolog - 从给定公式中提取符号
我正在尝试从公式中提取符号。前任:
到目前为止我所做的:
我相信我所做的是正确但不完整的。我被困住了。它显然适用于简单的公式,但不适用于更复杂的公式。我知道我必须将某些东西定义为simbol_formula(F,U) :-
. 以某种方式使用递归或将给定的公式分解为“较小”的公式。