问题标签 [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 投票
1 回答
2761 浏览

prolog - Prolog - 命题逻辑中的公式

我正在尝试制作谓词以验证给定输入是否代表公式。

我只能使用命题原子,如 p、q、r、s、t 等。我必须测试的公式如下:

wff如果给定的结构是公式,我已经做出了返回 true的谓词,否则返回 false。此外,我不必在公式中使用变量,只需使用下面提到的命题原子。

当我介绍一个像这样的测试时 wff(and(q, imp(or(p, q), neg(p)))).,调用会返回truefalse值。你能告诉我为什么会这样吗?

0 投票
2 回答
387 浏览

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]).

0 投票
1 回答
265 浏览

macros - 术语列表的术语扩展

假设我想要有许多都遵循相同模式的规则。当我想通过明确列出所有可能的第一个参数来避免非确定性行为时,我遇到了这种情况。然而,我知道,对于某些可能性,我需要做同样的事情。处理它的一种方法是在最后有一个包罗万象的条款:

但这不是很好,因为我实际上不知道是否有意外的输入,或者我的程序是否出错。为了避免这种情况,我也可以说

但同样,我现在正在与 Prolog 的确定性行为作斗争,并在争论成立时进行索引。

所以,相反,我做这样的事情:

问题是,我试图找到这样的现有代码,但我找不到。是因为我做错了什么吗?有没有更好的方法来解决这个问题?还是完全绕过它?

我不介意回答说“您正在解决错误的问题”。

编辑:一些谷歌搜索实际上让我从 SWI-Prolog 文档中找到了这个非常相似的例子:

http://www.swi-prolog.org/pldoc/man?section=ext-dquotes-motivation (在最底部)

0 投票
2 回答
3615 浏览

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 因为它不是一个数字......

是否有一个简单的解决方案来实现更清洁的结果?

0 投票
1 回答
88 浏览

prolog - 将整数约束在集合中

我正在使用in/1谓词尝试约束一个整数以从某个集合中获取值:

我没想到这会起作用,因为[...]是列表符号。我当然可以使用:

但这非常冗长。以下也有效:

并且有点短,但仍然很丑。

该文档指出:

Var 是 Domain 的一个元素。域是以下之一:

仅由整数组成的整数单例集。

我试过搜索什么是单例集(Prolog newbie here),但我在网上找不到任何东西。有没有更简洁的方式来表达我的约束?

0 投票
1 回答
553 浏览

prolog - Prolog中的树叶遍历

我在训练 prolog 练习时遇到了一些问题,下面的问题是,

谓词定义了树的含义,并且可以用来测试一个词是否是树:

通过使用此谓词,您可以在树中找到一个元素(称为叶子):

所以这里有两个问题,首先是编写谓词elements/2,它产生一个元素列表,因为它们在第一个参数中以从左到右的顺序在树的叶子中找到!

第二个是写一个谓词 same content/2,当两棵树以相同的顺序包含相同的元素时,它就成功了!重复很重要。

希望能得到任何擅长prolog的人可以帮助我,非常感谢。

0 投票
3 回答
1112 浏览

prolog - PROLOG 中的深度逆向 - 列表

嘿,我正在尝试创建一个谓词,用于在 PROLOG 中的嵌套列表上生成深度反向。

目前我得到了这个谓词

结果如下所示:

问题是,内部列表没有反转。它应该如下所示:

谢谢你的帮助。

0 投票
1 回答
257 浏览

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?

0 投票
1 回答
203 浏览

prolog - 使用 CLP(FD) 对任意长度子列表的约束

我正试图围绕 CLP(FD)。这是一个简单的例子,我不确定最惯用的方法。假设我们有一个数字列表 ( L),其中一些数字已经填充,如下所示。

我想说的是,一个固定数字的左右数字必须加总该数字。上述情况的可能解决方案是:

当然,还有其他解决方案。我的第一种方法是:

  1. 搜索第一个枢轴号;
  2. 获取pivot的左右子列表;
  3. Append两个列表;
  4. 使用 predicate sum/3,将结果列表约束为#=枢轴。

这会是意识形态的吗?我错过了更明显的东西吗?


2 级。我认为谓词sum/3完成了大部分工作。让我们稍微改变一下问题:

枢轴左侧和右侧的连续 1 字符串必须求和到枢轴。

所以鉴于此:

一个可能的解决方案是:

现在更棘手了……我想说的是,枢轴 N 的附加左右子列表必须包含长度为 N 的 1 的子列表。这有意义吗?我将如何使用 CLP(FD) 来表达这些观点?

0 投票
1 回答
41 浏览

prolog - 从给定公式中提取符号

我正在尝试从公式中提取符号。前任:

到目前为止我所做的:

我相信我所做的是正确但不完整的。我被困住了。它显然适用于简单的公式,但不适用于更复杂的公式。我知道我必须将某些东西定义为simbol_formula(F,U) :-. 以某种方式使用递归或将给定的公式分解为“较小”的公式。