问题标签 [dcg]

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 投票
4 回答
366 浏览

prolog - Prolog 中的公式化

我目前有以下问题,我想用 Prolog 解决。这是一个简单的例子,很容易用 Java/C/whatever 解决。我的问题是,我认为太依赖于 Java 的思想,无法以利用 Prolog 逻辑能力的方式来实际制定问题。

问题是..

我有一组 6 个箭头,指向左或右。假设它们处于以下起始配置中:

现在,我可以切换两个箭头,只要它们彼此相邻。我的目标是发现哪些动作序列将使箭头的初始配置变成

我最初尝试提出问题是..

这将告诉 Prolog 箭头的初始配置是什么。但是现在我如何在其中插入额外的逻辑呢?例如,如何实施switchArrows(Index)?在 Prolog 中说明这样的初始条件是否正确?arrow_a例如,当我尝试设置在位置 6 时,它不会干扰atPosition(6, arrow_a)吗?

0 投票
3 回答
626 浏览

prolog - 从 Prolog 中的谓词“返回”列表

我目前有这个算法,它可以正常工作。我这样运行它:

我确定该算法正在按应有的方式运行,它达到了目标状态,尽管Path的值为

这不是应该发生的事情。路径应该包含我的算法通过的“状态”序列。可能是什么问题?

0 投票
1 回答
2761 浏览

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

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

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

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

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

0 投票
3 回答
10555 浏览

prolog - 如何在 swi-prolog 中拆分句子

我正在尝试在 win xp 中使用 SWI-Prolog。我试图了解如何将 Prolog 中的句子拆分为单独的原子。

例如:假设我有这样一句话:

“这是一个字符串”
有没有办法让单个单词存储在变量中?

喜欢 :

X = 这个
Y = 是
....
等等。

谁能解释一下这是如何工作的?

谢谢。

0 投票
1 回答
841 浏览

prolog - 请Prolog DCG插图

目前我正在使用 Prolog 中的 DCG 来解析 XML 文件。我能够获得以下能够解析简单 XML 的代码片段,例如:

DCG定义为:

有人能说明一下 DCG 在这种情况下是如何工作的吗?我很难理解 DCG 中的参数(例如 [E] in xml([E]); [E|L] in xml([E|L])。)谢谢!

0 投票
1 回答
261 浏览

prolog - 应该添加哪些 DCG 规则?

好的,所以我正在使用 prolog 构建一个简单的 xml 解析器。我有以下 xml 文件:

在 Prolog 中,我使用以下 DCG 规则:

所以规则不能处理诸如“p1:1 in main:1”、“x:int”、“main:1”之类的东西。我实际上尝试将这些东西更改为“p1”、“x”、“main”,并且解析器工作得非常好。现在我应该添加什么规则以便解析器可以处理不规则标记?

解析树将是这样的:

以下是我得到的:

0 投票
2 回答
838 浏览

prolog - 如何在prolog中写方括号?

这听起来可能很奇怪,但它是在解析器中使用的,我希望能够解析某种形式的东西

富[酒吧]

因此,这将在列表中表示为:

[foo, [, bar, [] 也许这样的词在 DCG 中会写成:

问题是方括号是保留字符,那么我该如何在prolog中表示呢?

0 投票
2 回答
270 浏览

prolog - 搜索 Prolog 结构

我对由许多连词组成的公式(更大问题的一部分)感兴趣。我想写一个这样的程序:

:- get_params(conj(conj(a,b),c),X)

并返回连词的所有参数的列表,即X=[a,b,c]. 目前我可以做

:- get_params(conj(a,b),X)要得到X=[a,b]

使用简单的 Prolog 模式匹配,但你将如何做一些事情,例如

:- get_params(conj(conj(a,b),c),X)要得到X=[a,b,c]

看起来很简单,但我整天都在挣扎!

0 投票
4 回答
4238 浏览

list - gnu Prolog powerset 修改

所以我得到了这个用于powerset:

这会生成一个列表的所有集合。是否可以按列表顺序生成所有集合。

例子:

我想得到

请注意,此子集列表中没有[a,c],因为这些子集是从左到右的子集。

我尝试过结合使用追加和递归,但这并没有达到我想要的效果。小小在这一点上愣住了。

谢谢。

0 投票
2 回答
2075 浏览

parsing - Prolog 中的 DCG — 字符串

我正在使用 Prolog 的内置 DCG 功能编写 Lisp-to-C 翻译器。这就是我处理算术的方式:

就像现在一样,它不处理嵌套表达式。这是我认为可行的方法:

但我得到了这个:

我如何使它工作?