【发布时间】:2020-06-02 21:40:34
【问题描述】:
我无法理解 Prolog 中 DCG 的语法和用法。我正在使用的代码是一种“a=1*2+(3-4)/5”类型语法的解析器,以下是其中的一部分:
factor(factor(N)) --> int(N).
int(N):- number(N), N > 0, N < 10.
运行时是这样的
| ?- int(8).
yes
| ?- factor(8).
! Existence error in user:factor/1
! procedure user:factor/1 does not exist
! goal: user:factor(8)
| ?- factor([],[],[]).
no
所以 factor 需要 3 个参数。但是,我不明白这些参数的含义是什么,也不明白我需要输入什么才能使查询说“是”?
【问题讨论】:
-
factor(factor(N)) --> int(N).的目的/意义是什么? -
它是解析器的一部分(对于数学赋值,例如 a = 1 +4),一个因子可以只是一个 int,或者一个因子可以是括号内的表达式(表达式可以是术语,或术语加/减另一个表达式等)。因为看不懂,所以只剪掉了这部分。
-
三个参数是 1. 您在规则中定义的输出,2. 令牌的输入列表,以及 3. 令牌的输出列表(即
[])。 -
说:
phrase(factor(X), L)