如何解决未找到常量:GF 过载 奇怪的unicode字符实际问题工作版整体
我试图重载我在 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 字符都换成了实际字符。我还修复了 mkImp
的 V2
实例:如果您看到 here in the synopsis,则单个 mkImp
没有 V2
实例,它要么是 V
或 V2
和 NP
。
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 举报,一经查实,本站将立刻删除。