1

我在 GF 上写了许多不同的句子,其中包含介词,但我发现在某些情况下,GF 输出不包含我在以下程序中定义的句子中的介词。

真的不知道这种输出背后的原因!

抽象的:

abstract Test = {
flags startcat = Imperative;
cat
    Imperative;
fun

-- Utt
Sentence : Imperative;}

具体的:

concrete TestEng of Test = open SyntaxEng,  ParadigmsEng in {

lincat
    Imperative  = Imp;
lin

    Sentence = mkImp (mkVP
                    (mkV2 (mkV "play"))
                    (mkNP
                        a_Det
                        (mkCN
                            (mkN2
                                (mkN "movie")
                                for_Prep
                                ))));}

输出:

play a movie, play a movie, play a movie, play a movie, do not play a movie, do not play a movie, do not play a movie, do not play a movie, don't play a movie, don't play a movie, don't play a movie, don't play a movie

最美好的祝愿~

4

1 回答 1

1

N2 的预期用途

N2 和 N3 的目的是带参数的名词。RGL 文档中的示例是“从这个城市到巴黎的距离”。

现在,显然您可以只说“距离”,这并没有错。这就是为什么我们有使 N2 和 N3 成为不带参数的 CN 的函数。

反之亦然:您可以说,就像说“从东京到巴黎的树”并没有错。这是一个愚蠢的上下文:“我们将哪些树送到哪些地方?” “这是从东京到巴黎的树”。

但是,我希望你同意,从 XY的论点感觉“距离”比“树”更自然一些。这条线是故意模糊的——作为一个语法学家,你总是可以决定是否将介词编码成名词更有意义(使其成为 N2/N3),或者是否将完整的副词附加到常规名词(N )。

N2中的介词会发生什么

那么让我们看看N2和CN会发生什么。

oper
  movie_for : N2 = mkN2 (mkN "movie") for_Prep ;

N2 有一个固有的介词,用于潜在的补语。让我们仔细检查一下它是否存在:

  cc -table movie_for
  s . Sg => Nom => movie
  s . Sg => Gen => movie's
  s . Pl => Nom => movies
  s . Pl => Gen => movies'
  c2 . for
  g . Neutr

正如我之前所说,您可以通过任何一种方式将 N2 变成 CN:添加补码或不添加补码。如果我们使用补语,您会看到介词和补语都添加到 CN 的s字段中。

> cc -table mkCN movie_for somebody_NP
  s . ParamX.Sg => ResEng.Nom => movie for somebody
  s . ParamX.Sg => ResEng.Gen => movie for somebody
  s . ParamX.Pl => ResEng.Nom => movies for somebody
  s . ParamX.Pl => ResEng.Gen => movies for somebody
  g . ResEng.Neutr

但是,如果您使用不带补语的版本,介词将保留在该c2字段中。

> cc -table mkCN movie_for
  s . ParamX.Sg => ResEng.Nom => movie
  s . ParamX.Sg => ResEng.Gen => movie's
  s . ParamX.Pl => ResEng.Nom => movies
  s . ParamX.Pl => ResEng.Gen => movies'
  c2 . for
  g . ResEng.Neutr

当我们将 CN 变成 NP 时,该c2字段被完全忽略。

为什么?

这是预期的行为。我们可以说“距离很长”,“从东京到巴黎的距离很长”,但很难说“*从到的距离很长”。因此,这同样适用于任何 N2 和 N3:仅在添加实际补语时才使用介词。

您是否特别想制作“电影”,或者这只是一个简化的例子?如果你告诉我你想构建什么样的短语,我可以帮助你找到合适的函数来做到这一点。

编辑。制作“为我播放电影”,这是有效的:

Sentence =
 mkImp (mkVP
          (mkVP (mkV2 "play") (mkNP a_Det (mkN "movie")))
          (SyntaxEng.mkAdv for_Prep i_NP)
       ) ;
于 2020-12-14T16:08:34.230 回答