问题标签 [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.
prolog - Prolog 中的公式化
我目前有以下问题,我想用 Prolog 解决。这是一个简单的例子,很容易用 Java/C/whatever 解决。我的问题是,我认为太依赖于 Java 的思想,无法以利用 Prolog 逻辑能力的方式来实际制定问题。
问题是..
我有一组 6 个箭头,指向左或右。假设它们处于以下起始配置中:
现在,我可以切换两个箭头,只要它们彼此相邻。我的目标是发现哪些动作序列将使箭头的初始配置变成
我最初尝试提出问题是..
这将告诉 Prolog 箭头的初始配置是什么。但是现在我如何在其中插入额外的逻辑呢?例如,如何实施switchArrows(Index)
?在 Prolog 中说明这样的初始条件是否正确?arrow_a
例如,当我尝试设置在位置 6 时,它不会干扰atPosition(6, arrow_a)
吗?
prolog - 从 Prolog 中的谓词“返回”列表
我目前有这个算法,它可以正常工作。我这样运行它:
我确定该算法正在按应有的方式运行,它达到了目标状态,尽管Path
的值为
这不是应该发生的事情。路径应该包含我的算法通过的“状态”序列。可能是什么问题?
prolog - Prolog - 命题逻辑中的公式
我正在尝试制作谓词以验证给定输入是否代表公式。
我只能使用命题原子,如 p、q、r、s、t 等。我必须测试的公式如下:
wff
如果给定的结构是公式,我已经做出了返回 true的谓词,否则返回 false。此外,我不必在公式中使用变量,只需使用下面提到的命题原子。
当我介绍一个像这样的测试时
wff(and(q, imp(or(p, q), neg(p)))).
,调用会返回true
和false
值。你能告诉我为什么会这样吗?
prolog - 如何在 swi-prolog 中拆分句子
我正在尝试在 win xp 中使用 SWI-Prolog。我试图了解如何将 Prolog 中的句子拆分为单独的原子。
例如:假设我有这样一句话:
“这是一个字符串”
有没有办法让单个单词存储在变量中?
喜欢 :
X = 这个
Y = 是
....
等等。
谁能解释一下这是如何工作的?
谢谢。
prolog - 请Prolog DCG插图
目前我正在使用 Prolog 中的 DCG 来解析 XML 文件。我能够获得以下能够解析简单 XML 的代码片段,例如:
DCG定义为:
有人能说明一下 DCG 在这种情况下是如何工作的吗?我很难理解 DCG 中的参数(例如 [E] in xml([E]); [E|L] in xml([E|L])。)谢谢!
prolog - 应该添加哪些 DCG 规则?
好的,所以我正在使用 prolog 构建一个简单的 xml 解析器。我有以下 xml 文件:
在 Prolog 中,我使用以下 DCG 规则:
所以规则不能处理诸如“p1:1 in main:1”、“x:int”、“main:1”之类的东西。我实际上尝试将这些东西更改为“p1”、“x”、“main”,并且解析器工作得非常好。现在我应该添加什么规则以便解析器可以处理不规则标记?
解析树将是这样的:
以下是我得到的:
prolog - 如何在prolog中写方括号?
这听起来可能很奇怪,但它是在解析器中使用的,我希望能够解析某种形式的东西
富[酒吧]
因此,这将在列表中表示为:
[foo, [, bar, [] 也许这样的词在 DCG 中会写成:
问题是方括号是保留字符,那么我该如何在prolog中表示呢?
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]
看起来很简单,但我整天都在挣扎!
list - gnu Prolog powerset 修改
所以我得到了这个用于powerset:
这会生成一个列表的所有集合。是否可以按列表顺序生成所有集合。
例子:
我想得到
请注意,此子集列表中没有[a,c]
,因为这些子集是从左到右的子集。
我尝试过结合使用追加和递归,但这并没有达到我想要的效果。小小在这一点上愣住了。
谢谢。
parsing - Prolog 中的 DCG — 字符串
我正在使用 Prolog 的内置 DCG 功能编写 Lisp-to-C 翻译器。这就是我处理算术的方式:
就像现在一样,它不处理嵌套表达式。这是我认为可行的方法:
但我得到了这个:
我如何使它工作?