[英]Prolog DCGs Multiple Features?
據我了解,在 Prolog 中,您在解析時捕獲功能,如下所示:
foo(feature(X)) --> [X], bar.
這在設計 DCG 時很常見嗎?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.
DCG 描述列表和非終端的 arguments 之間的關系。 但是,這些 arguments 只是術語。 它們可以用來表示特征,但不能直接表示它們。 要查看差異,假設您要將特征數量與每個節點相關聯。 在 DCG 中,您現在必須逐個決定如何表示該特征。 在一個節點中它是feature(X, singular)
,而在另一個節點中它可能看起來不同。 或者您可能決定用一個列表統一表示所有特征,因此[nodename=idx,..., numerus=singular,...]
。
這是完全有效的,而且非常有用。 例如,考慮這個規則,取自經典(現在免費!)書籍PNLA ,它使用兩個 arguments 來捕捉及物動詞tv
的變形和“意義”(邏輯形式, LF
):
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)}.
一個動詞可以定義為
tv( write, writes, wrote, written, writing, X^Y^ `writes(X,Y) ).
(見完整的例子。 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.