是否可以在DCG中创建如下的传递函数?或者将其与DCG规则结合使用?
genx(A,B) :- gen(A,B).
genx(A,C) :- gen(A,B), genx(B,C).
gen(a,b).
gen(b,c).
我将解释我试图做的事情:
如果我有这个语法:
noun_phrase(D,N) --> det(D), noun(N).
noun(n(cat)) --> [cat].
我想制定一些限制,比如我希望N
中的noun(N)
成为动物。所以我可以使用这样的东西:
noun_phrase(np(D,N)) --> det(D), noun(N), genx(N, animal).
如果猫的信息是动物,可以从以下事实中推断:
gen(cat,pet).
gen(pet,animal).
由于
答案 0 :(得分:0)
不确定不准。
如果我没有错,从正式的角度来看规则
genx(A,B) :- gen(A,B).
genx(A,C) :- gen(A,B), genx(B,C).
可以用DCG语法编写为
genx --> gen.
genx --> gen, genx.
并且,事实上,
gen(a, b).
gen(b, c).
genx(a, c)
应该返回true。
但是,DCG中的A
,B
,C
是列表。
我不知道以这种方式使用DCG(用于解析)来实现代数规则是否合理。