簡體   English   中英

Prolog DCGs 多重特性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM