Prolog - 大于x的数字

时间:2013-11-13 16:53:49

标签: prolog dcg arithmetic-expressions

我正在使用Prolog算法并且有一个生成抽象语法树的程序,例如plus(num(1),num(2)),它只是1+2。这是通过使用DCG完成的。在此示例中,plus(num(1),num(2))与前缀列表表示[+,1,2]相同。

我的问题是我只想允许num(x)大于3.例如,num(4)是允许的,但不是num(1)

我是这样做的:

num(num(4)) --> [4].
num(num(5)) --> [5].
num(num(6)) --> [6].
num(num(7)) --> [7].

等。但对于大于3的数字,我想对num(num(x)) --> [x].做一些事情。对于如何处理这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:3)

怎么样:

num(num(X)) --> [X], {X > 3}

{} / 1可用于嵌入条件和副作用 在DCG语法规则中。在许多Prolog系统中都可以找到DCG 但还没有一个成熟的标准。但大多数Prolog 系统确实有{} / 1。例如,这里定义:

明确的条款语法规则
Klaus Daessler
2013年8月20日
http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dcgs/dcgsdin130820.pdf

在词汇表中,{} / 1作为“语法体目标”。在较旧的 该出版物被称为“辅助行动”,“程序” 称“或”额外条件“,这可能比更合理 只是称它为语法体目,因为我们希望看到所有 语法体的组成部分作为语法体目标。看看 例如:

语言分析的明确条款语法
Fernando C. N. Pereira和David H. D. Warren
人工智能13(1980),231-278
http://cgi.di.uoa.gr/~takis/pereira-warren.pdf

再见