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

string - 我可以在 Prolog 中从字符列表转换为字符串或术语吗

我用

从文件中读取一行..首先有没有办法读取一行并将其分配给序言中的一个术语?如果不是,我设法读取一行并将其放入此 char 列表.. 现在此 char 列表包含空格.. 这很糟糕.. 所以我想将它转换为 prolog 中的术语或字符串,以便我可以处理它更容易..空间不能是原子,所以这是一个问题..

我很感激帮助!

0 投票
1 回答
1462 浏览

string - Prolog:删除字符流中的多余空格

Prolog 的总新手。这个让我有点沮丧。我下面的“解决方案”是我试图使 Prolog 程序化......

如果需要,这将删除空格或在逗号后插入空格,也就是说,直到遇到句点:

目标:我想知道如何在逗号之前删除任何空格。

以下工作,但在很多层面上都是错误的,尤其是“退出”!

0 投票
2 回答
605 浏览

prolog - 需要关于 Prolog DCG 的问题/练习

您是否知道我在哪里可以找到涉及 DCG 的序言问题/练习列表,以便我可以更好地理解这个概念?

我已经阅读了一些关于它的规范,但是学习它的最好方法是练习它。

谢谢!

0 投票
4 回答
453 浏览

prolog - 问题 - 序言中的形式语言

我正在尝试构建一个 DCG,它可以识别与此表单匹配的所有列表:a^n b^2m c^2m d^n
我写了以下规则:
s --> [].
s --> ad.
ad --> a, ad, d.
ad --> bc.
bc --> b, b, bc, c, c.
bc --> [].
a --> [a].
b --> [b].
c --> [c].
d --> [d].

当我尝试评估具有这些规范的字符串时,例如 list [a,b,b,c,c,d],它可以工作。但是,当我尝试评估查询phrase(s, X)以查看此语法返回的所有可能字符串时,它会循环到无穷大。

我构建 DCG 的方式有问题吗?

0 投票
2 回答
271 浏览

prolog - Prolog DCG:从编程符号转换为逻辑符号

我试图从这个符号转换:

到标准的逻辑符号,即类似的东西and(A,B), or(A,B), neg(A)...

我认为我这样做的好方法是使用 DCG(我提出这个问题是因为我想练习 DCG)。任何想法为什么我的转换不起作用?到目前为止,我刚刚写了析取和得到变量的情况。我想要的答案应该是 or(atom(X),atom(Y))。

0 投票
1 回答
1585 浏览

prolog - Prolog:DCGS - 将数字转换为英文

我正在 Prolog 中练习使用 DCG。我取一个像 123 这样的整数,将它“分解”成一个列表,即 [1,2,3],然后我想使用 DCG 规则来获得输出一二三。到目前为止,我可以将一个整数列表(例如 [1])转换为一个整数,但我不知道当涉及到一个列表时该怎么做。我想尽可能多地使用 DCG,因为这是我正在练习的。这是我当前的代码:

不使用 DCG 的可能解决方案是我之前写过的,但我想知道如何使用 DCG 编写它。

0 投票
1 回答
591 浏览

prolog - 序言:简单的 DCG a^nb^n

我一直在尝试习惯在 Prolog 中使用 DCG 并且失败了。

如何定义一组语法规则来接受语言 a^nb^n?

例如 aaaabbbb 或 ab 等...

谢谢 :)。

0 投票
4 回答
6582 浏览

prolog - 在 Prolog 中连接字符串列表

我正在编写一个 Lisp 到 C 的翻译器,但我在处理字符串时遇到了问题。这是一个将一元 Lisp 函数转换为 C 等价物的代码:

现在我想读取任意数量的函数并将它们作为单个字符串返回。以上funs是我能想到的最好的,但它的工作原理是这样的:

虽然我想要这样的东西:

这样我就可以很好地swritef进入一个完整的程序,在#includes 和 main() 之间。另一种解决方案是修改最高级别的转换器来处理列表。它现在看起来像这样:

我将如何做这两个?我正在使用 SWI Prolog。

0 投票
2 回答
2672 浏览

regex - 用 Prolog 编写的正则表达式解析器

几个小时以来,我一直在努力解决这个家庭作业问题。我们必须用 Prolog 解析一个正则表达式。在大多数情况下,我使用的谓词都有效,但是有一些正则表达式和字符串组合会导致它们在 SWI-Prolog 中耗尽堆栈空间。这是一个包含两个正则表达式字符串组合的示例,一个有效,一个无效:

第一个有效,第二个用完堆栈。

这是我正在使用的谓词:

我不确定我需要进行哪些更改才能使其正常工作,但我不确定还能做什么。

此外,将 List :- append(List1, List2, List) 更改为 [H|T] 不会对其中一个示例进行评估。

0 投票
5 回答
29534 浏览

io - 在 Prolog 中逐行读取文件

我想读取一个纯文本文件并对每一行应用一个谓词(谓词包含write输出的内容)。我该怎么做?