为什么将DCG定义为描述列表的紧凑方式?

问题描述:

在我看来,将DCGs(定义语句语法)定义为是一种简洁的方式来描述Prolog中的列表,对于定义它们是一种很差的方式。据我所知,DCGs不仅用于Prolog,还用于其他编程语言,如Mercury。
此外,它们被称为DCG,因为它们表示逻辑程序设计基础的一组明确子句(Horn子句)中的语法。 那么,为什么如果一个完整的Prolog程序可以使用明确的子句来编写,那么为什么要将DCG定义为这种紧凑的方式来描述Prolog中的列表?为什么将DCG定义为描述列表的紧凑方式?

注:疑问来自SO给出的标签的描述。

+1

我相信你在SO的“定义”中注入了单独的形容词* *。 ;)所以,关于DCG的说法是真的(对@mat而言),但这不是我称之为DCG完整目的的描述。 – lurker 2015-03-19 13:16:32

+0

准确@lurker,这是我的观点。 “纯粹”我的意思是说这只是CDG的一个好处,我想我没有把对,我的坏:) – Yasel 2015-03-19 15:33:58

+0

没问题。 *仅*意味着它是*唯一的好处*,而不是*只有一个*,但仅仅是技术性。我认为这确实会造成一个有趣的问题。 :) – lurker 2015-03-19 15:35:13

从DCG标签的wiki extended info提供额外的信息,我认为这是既与第一点正确,也非常一致:

“DCG中通常与Prolog的关联,但类似的语言, 因为水星也包括DCGs。“

关于你的第二点:强调与Prolog列表的密切关联在我看来是很有道理的,因为DCG确实总是描述一个列表,并且通常也非常紧凑。