我正在尝试将小数和两位数的小数添加到 RGL 中,同时保留mkNumeral或mkDigits之后的名词的原始单数/复数规则。我尝试使用多个名词作为
mkNP(mkCN
(mkN("ein"))
(mkNP(mkCN
(mkN("ein"))
(mkNP(mkN("halb"))))));
但是这种方法不适用于所有语言,因为德语eineinhalb
之间没有空格,并且使用aPl_Det
来获取名词的复数可能适用于英语和德语,但不适用于其他语言,例如实际上有一个真实的 aPl_Det
.
因此我尝试扩展一个 NP 并将多个字符串添加到它的 s中,例如跟随
open SyntaxEng, ParadigmsEng, ResEng in {
oper
newNp : Str -> N -> NP =
\num, noun -> case occur (".")(num) of{
PTrue =>
let myNewNP = it_NP ** {s = (mkNP(mkDet(mkNumeral(dropDec num)))).s ++ "point" ++ (mkNP(mkDet(mkNumeral(decNum num)))).s ++ noun ! Pl} ;
-- noun is plural here because any number greater than 1 is plural, and I don't expect the user to input 1.00
in myNewNP;
PFalse => mkNP(mkDet(mkNumeral (num)))(noun)};
decNum : Str -> Str = \num -> dp (2) (num);
dropDec : Str -> Str = \num -> tk (3) (num);
}}
我得到的错误信息如下。符号 (...) 表示还有其他 mkDet 实例,但它们对于这个问题并不重要。
no overload instance of mkDet
for
{s : Bool => CardOrd => Case => Str; lock_Numeral : {}; n : Number}
among
...
...
{s : Bool => CardOrd => Case => Str; lock_Numeral : {}; n : Number}
...
...
with value type Str
值类型 Str 是什么意思以及如何解决这样的问题?