Parsing Prolog-Or语句中的定句语法

Parsing Prolog-Or语句中的定句语法,parsing,prolog,dcg,Parsing,Prolog,Dcg,用两种方法中的任何一种来定义一个可以描述副词的短语,最好的方法是什么 你能说: 副词短语(N,adv(N,adv))->方式一 副词短语(N,adv(N,adv))-->way2. 我尝试过这样做,但我在输出中得到了变量(如\u G12345),这看起来不正确。是的,您所展示的绝对是一种有效的方式来陈述CGS中的替代方案 还有其他选择。以下是一些: 1.你的版本 这是您的版本,仅扩展到更完整的示例: adverb_phrase(N, adv(N,Adv)) --> adv1(Adv). adve

用两种方法中的任何一种来定义一个可以描述副词的短语,最好的方法是什么

你能说:

  • 副词短语(N,adv(N,adv))->方式一
  • 副词短语(N,adv(N,adv))-->way2.

  • 我尝试过这样做,但我在输出中得到了变量(如
    \u G12345
    ),这看起来不正确。

    是的,您所展示的绝对是一种有效的方式来陈述CGS中的替代方案

    还有其他选择。以下是一些:

    1.你的版本 这是您的版本,仅扩展到更完整的示例:

    adverb_phrase(N, adv(N,Adv)) --> adv1(Adv). adverb_phrase(N, adv(N,Adv)) --> adv2(Adv). adv1(likely) --> []. adv2(happily) --> []. 在本例中,我只是简单地使用了相同的非终结符来表示替代项

    3.使用
    (“|”)//2
    请注意,还有其他方法表示备选方案。一种优雅的方法是使用
    (“|”)//2
    ,类似于在其他形式主义中通常表示备选方案的方式

    例如,您可以将初始示例编写为:

    adverb_phrase(N, adv(N,Adv)) --> adv1(Adv) | adv2(Adv). adv1(likely) --> []. adv2(happily) --> []. 副词短语(N,adv(N,adv))->adv1(adv)| adv2(adv)。 adv1(可能)->[]。 adv2(高兴地)->[]。 与plainProlog类似,您也可以使用
    (;)//2
    ,而不是
    (“|”)//2

    所示的变体产生完全相同的答案。您选择的版本取决于几个因素,例如:您是否更多地使用“语法”或“单子”意义上的DCG

    对于您的具体情况,从第一印象来看,版本2似乎非常适合


    请注意,这两个选项都不是“或声明”。我们称之为非终结符

    谢谢你为我详细说明! adverb_phrase(N, adv(N,Adv)) --> adv(Adv). adv(likely) --> []. adv(happily) --> []. adverb_phrase(N, adv(N,Adv)) --> adv1(Adv) | adv2(Adv). adv1(likely) --> []. adv2(happily) --> [].