dno*_*len 7 parsing prolog dcg
根据我的理解,在Prolog中,您可以在解析时捕获功能:
foo(feature(X)) --> [X], bar.
Run Code Online (Sandbox Code Playgroud)
在设计DCG时这是常见的吗?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.
Run Code Online (Sandbox Code Playgroud)
DCG描述了列表与非终端参数之间的关系.但是,这些论点只是条款.它们可用于表示要素但不直接表示它们.要想看到差异,想象一下您想要将一个特征数字与每个节点相关联.在DCG中,您现在可以根据具体情况决定如何表示该功能.在一个节点中,它feature(X, singular)
在另一个节点中可能看起来不同.或者,您可能决定使用列表统一表示所有要素[nodename=idx,..., numerus=singular,...]
.
它非常有效,非常有用.作为一个例子,考虑这个规则,取自经典(现在是免费的)书籍PNLA,它使用两个参数来捕捉变形LF
动词的变形和"含义"(逻辑形式)tv
:
tv(nonfinite, LF) --> [TV], {tv(TV, _, _, _, _, LF)}.
tv(finite, LF) --> [TV], {tv(_, TV, _, _, _, LF)}.
tv(finite, LF) --> [TV], {tv(_, _, TV, _, _, LF)}.
tv(past_participle, LF) --> [TV], {tv(_, _, _, TV, _, LF)}.
tv(pres_participle, LF) --> [TV], {tv(_, _, _, _, TV, LF)}.
Run Code Online (Sandbox Code Playgroud)
然后可以将动词定义为
tv( write, writes, wrote, written, writing, X^Y^ `writes(X,Y) ).
Run Code Online (Sandbox Code Playgroud)
(见完整的例子.)
归档时间: |
|
查看次数: |
230 次 |
最近记录: |