微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未找到常量:GF 过载 奇怪的unicode字符实际问题工作版整体

如何解决未找到常量:GF 过载 奇怪的unicode字符实际问题工作版整体

我试图重载我在 GF 上创建的函数,但在使用重载函数后,我不断收到此错误消息。

enter image description here

我是否错误地使用了GF的此功能或此功能是否有任何新的更新。

这就是我想要做

Sentence = sentence(mkN(“random”));

oper

sentence:overload {

sentence:N-> Utt =

\noun->

mkUtt(mkNP(noun));

sentence:V-> Utt =

\ verb->

mkutt(mkImp(mkV2(verb)));

};


谢谢~

解决方法

看起来你的代码是一个片段,所以可能有一些东西阻止你的语法编译。

首先,如果您选中 the documentation,您可以看到有两种形式的重载操作。

您正在使用语法给出定义操作的类型。相反,您应该将此现有代码与定义操作的语法一起使用。

oper sentence = overload {...} ;

在执行重载操作之前,应使用您使用的语法来定义类型。

,

奇怪的unicode字符

此示例中有很多错误。首先,您似乎是用文字处理器而不是文本编辑器编写的,因为字符不是它们应有的样子。例如,: 是真正的冒号,而您的代码片段有 ,这是一个不同的 Unicode 代码点。并排看:

:: -- first the wrong one,followed by the correct one

:: -- The wrong colon includes more space
:: -- the right colon is thicker and less space

这个问题的解决方案是在文本编辑器(如 Atom 或 Sublime)或编程 IDE(如 VS 代码)中编程,而不是在文字处理器中。许多编辑器没有针对 GF 的语法高亮显示,但您可以在 this video 中看到如何改用 Haskell 模式。

实际问题

现在假设我们修复了字符,然后我们有了这个。

sentence : overload {

  sentence : N -> Utt =
    \noun -> mkUtt (mkNP noun) ;

  sentence : V -> Utt =
    \verb -> mkUtt something_NP ; -- the original had an unrelated bug
  } ;

现在我们得到您描述的错误。解决方案是将第一个 : 更改为 =,如下所示:

sentence = overload { -- = used to be :

{-  sentence : N -> Utt =         -- the rest unchanged
    \noun -> mkUtt (mkNP noun) ;

  sentence : V -> Utt =
    \verb -> mkUtt something_NP ; -- the original had an unrelated bug
  } ; -}

工作版整体

正如 Paula 所说,您的示例只是片段。这是一个最小的完全工作版本。

abstract Sentences = {

  cat
    S ;
  fun
    Sentence : S ;
}

这是一个具体的,所有奇怪的 Unicode 字符都换成了实际字符。我还修复了 mkImpV2 实例:如果您看到 here in the synopsis,则单个 mkImp 没有 V2 实例,它要么是 VV2NP

concrete SentencesEng of Sentences = open SyntaxEng,ParadigmsEng in {

  lincat
    S = Utt ;
  lin
    Sentence = sentence (mkN "random") ;

oper

sentence = overload {

  sentence : N -> Utt =
    \noun -> mkUtt (mkNP noun) ;

  sentence : V -> Utt =
    \verb -> mkUtt (mkImp (mkV2 verb) something_NP) ;
  } ;

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。