首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GF上动词短语的连词

GF上动词短语的连词
EN

Stack Overflow用户
提问于 2022-02-10 08:07:42
回答 1查看 56关注 0票数 1

问题

我试图使用RGL在GF上生成句子It's sunny on Monday and rainy on Tuesday。我在RGL页面上寻找一种生成这个句子的方法,但是我找不到任何可能对此有帮助的方法。查看Extend.gf on GitHub以获得有关GF的更多信息,我发现了以下三行:

代码语言:javascript
复制
    MkVPS      : Temp -> Pol -> VP -> VPS ;  -- hasn't slept
    ConjVPS    : Conj -> [VPS] -> VPS ;      -- has walked and won't sleep
    PredVPS    : NP   -> VPS -> S ;          -- she [has walked and won't sleep]

乍一看,它们似乎很有希望,但当我尝试在真正的代码上实现它们时,似乎滥用了[VPS]。我的代码:

代码语言:javascript
复制
mkPhr(PredVPS
        (it_NP)
        (ConjVPS
            (and_Conj)
            (MkVPS
                (mkTemp (futureTense) (simultaneousAnt))
                (positivePol)
                (mkVP
                    (mkVP (mkA "sunny"))
                    (SyntaxEng.mkAdv (on_Prep) (mkNP (mkN ("Monday"))))))
            (MkVPS
                (mkTemp (futureTense) (simultaneousAnt))
                (positivePol)
                (mkVP
                    (mkVP (mkA "rainy"))
                    (SyntaxEng.mkAdv (on_Prep) (mkNP (mkN ("Tuesday"))))))));

但是我遇到了这个错误,这显然是定义的变量和预期变量的问题。

代码语言:javascript
复制
missing record fields: s1, s2 type of MkVPS (mkTemp futureTense simultaneousAnt) positivePol (AdvVP ((\a -> UseComp (CompAP (PositA a))) (regA "rainy")) (PrepNP on_Prep ((\n -> MassNP (UseN n)) (regN "Monday"))))
      expected: {s1 : ResEng.Agr => Str; s2 : ResEng.Agr => Str}
      inferred: {s : ResEng.Agr => Str; lock_VPS : {}}

问题

使用[VPS]的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 02:41:46

对清单的澄清

与其他列表类别C一样,您需要使用一个构造函数,该构造函数需要两个(或更多)C,并创建一个[C]

对于RGL中的类别,有mkC : Conj -> C -> C -> C类型的方便选项,但在屏蔽项下,这些选项还需要为[C]调用适当的构造函数。(构造函数名为BaseCConsC,您可以在lists 这里上阅读更多内容。)

如何在VPSs中使用连词

因此,VPS不在API中,因此没有使用类型签名Conj -> VPS -> VPS -> VPS的方便程序。相反,您需要显式地调用BaseVPS。这是工作代码,我把你的长表达式切成小块。

代码语言:javascript
复制
resource VPS = open SyntaxEng, ParadigmsEng, ExtendEng in {
  oper
    -- Lexicon
    sunny_A : A = mkA "sunny" ;
    rainy_A : A = mkA "rainy" ;
    monday_N : N  = mkN "Monday" ;
    tuesday_N : N  = mkN "Tuesday" ;

    -- Helper functions
    adj_on_day : A -> N -> VP = \a,n ->
      mkVP (mkVP a) (SyntaxEng.mkAdv on_Prep (mkNP n)) ;
    sunny_on_Monday_VP  : VP = adj_on_day sunny_A monday_N ;
    rainy_on_Tuesday_VP : VP = adj_on_day rainy_A tuesday_N ;

    tenseVPS : Tense -> VP -> VPS = \tns,vp -> 
      MkVPS (mkTemp tns simultaneousAnt) positivePol vp ;
    futureVPS = tenseVPS futureTense ;
    pastVPS = tenseVPS pastTense ;

    -- Constructing the phrase
    -- lin: "it will be sunny on Monday and will be rainy on Tuesday"
    futFutPhrase : Phr =
      mkPhr (
        PredVPS it_NP
                (ConjVPS -- : Conj -> [VPS] -> VPS
                   and_Conj -- : Conj
                   (BaseVPS -- : VPS -> VPS -> [VPS]
                     (futureVPS sunny_on_Monday_VP)  -- : VPS
                     (futureVPS rainy_on_Tuesday_VP) -- : VPS
                   )
                )
      ) ;

    -- lin: "it was sunny on Monday and will be rainy on Tuesday"
    pastFutPhrase : Phr =
      mkPhr (
        PredVPS it_NP
                (ConjVPS -- : Conj -> [VPS] -> VPS
                   and_Conj -- : Conj
                   (BaseVPS -- : VPS -> VPS -> [VPS]
                     (pastVPS sunny_on_Monday_VP)    -- : VPS
                     (futureVPS rainy_on_Tuesday_VP) -- : VPS
                   )
                )
      ) ;
}

它的作用是这样的:

代码语言:javascript
复制
$ gf
Languages:
> i -retain VPS.gf
> cc -one futFutPhrase
it will be sunny on Monday and will be rainy on Tuesday
> cc -one pastFutPhrase
it was sunny on Monday and will be rainy on Tuesday

所以在这两种情况下,时态都是重复的,因为连词是在VPS水平上,而不是在AP层次上。

如何创建你想要的短语

如果您想使用省略号,“星期一将是晴天,星期二会下雨”,则需要使用AdvAP将“周一”附加到AP " sunny“,然后进行AP连接,将该AP转换为VP,然后像往常一样在Cl中使用该VP。下面是代码,这是一个独立于前一个文件的文件:

代码语言:javascript
复制
resource APConj = open SyntaxEng, ParadigmsEng, (A=AdjectiveEng) in {
  oper
    -- Lexicon
    sunny_A : A = mkA "sunny" ;
    rainy_A : A = mkA "rainy" ;
    monday_N : N  = mkN "Monday" ;
    tuesday_N : N  = mkN "Tuesday" ;

    -- Helper functions
    adj_on_day : A -> N -> AP = \a,n ->
      A.AdvAP (mkAP a) (SyntaxEng.mkAdv on_Prep (mkNP n)) ;
    sunny_on_Monday_AP  : AP = adj_on_day sunny_A monday_N ;
    rainy_on_Tuesday_AP : AP = adj_on_day rainy_A tuesday_N ;

    -- Constructing the phrase

    sunnyRainyEllipsisPhrase : Phr =
      mkPhr (
        mkCl (
          mkVP (mkAP and_Conj sunny_on_Monday_AP rainy_on_Tuesday_AP)
          )
      ) ;
}

工作方式如下:

代码语言:javascript
复制
$ gf
Languages:
> i -retain APConj.gf 
> cc -one sunnyRainyEllipsisPhrase
it is sunny on Monday and rainy on Tuesday
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71061653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档