mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-13 09:00:12 -06:00
58 lines
2.7 KiB
Plaintext
58 lines
2.7 KiB
Plaintext
concrete NumeralMkd of Numeral = CatMkd [Numeral,Digits,Decimal] ** open Prelude,ResMkd in {
|
|
|
|
lin D_0 = mkDig "0" Pl ;
|
|
lin D_1 = mkDig "1" Sg ;
|
|
lin D_2 = mkDig "2" Pl ;
|
|
lin D_3 = mkDig "3" Pl ;
|
|
lin D_4 = mkDig "4" Pl ;
|
|
lin D_5 = mkDig "5" Pl ;
|
|
lin D_6 = mkDig "6" Pl ;
|
|
lin D_7 = mkDig "7" Pl ;
|
|
lin D_8 = mkDig "8" Pl ;
|
|
lin D_9 = mkDig "9" Pl ;
|
|
lincat Dig = {s : Str; n : Number} ;
|
|
lincat Digit = {s : Str; teen : Str; ten : Str; hundred : Str} ;
|
|
lin IDig d = d ** {tail = T1} ;
|
|
lin IFrac ds d = {s = case ds.hasDot of {
|
|
True => ds.s;
|
|
False => ds.s ++ BIND ++ ","
|
|
} ++ BIND ++ d.s;
|
|
n = Pl; hasDot = True} ;
|
|
lin IIDig d ds = {s = d.s
|
|
++ case ds.tail of {
|
|
T3 => BIND ++ "." ++ BIND;
|
|
_ => BIND
|
|
} ++ ds.s;
|
|
n = Pl; tail = inc ds.tail} ;
|
|
lin NegDecimal ds = {s = "-" ++ BIND ++ ds.s; n = Pl;
|
|
hasDot = False} ;
|
|
lin PosDecimal ds = ds ** {hasDot = False} ;
|
|
lincat Sub10 = {s : Str; hundred : Str; n : Number} ;
|
|
lincat Sub100 = {s : Str; n : Number} ;
|
|
oper mkDig : Str -> Number -> {s : Str; n : Number}
|
|
= \s,n -> {s = s; n = n} ;
|
|
oper mkDigit : Str -> Str -> Str -> Str -> {s : Str; teen : Str;
|
|
ten : Str; hundred : Str}
|
|
= \s,teen,ten,hundred -> {s = s; teen = teen; ten = ten;
|
|
hundred = hundred} ;
|
|
lin n2 = mkDigit "два" "дванаесет" "дваесет" "двесто" ;
|
|
lin n3 = mkDigit "три" "тринаесет" "триесет" "тристо" ;
|
|
lin n4 = mkDigit "четири" "четиринаесет" "четириесет" "четиристо" ;
|
|
lin n5 = mkDigit "пет" "петнаесет" "педесет" "петсто" ;
|
|
lin n6 = mkDigit "шест" "шеснаесет" "шеесет" "шестсто" ;
|
|
lin n7 = mkDigit "седум" "седумнаесет" "седумдесет" "седумсто" ;
|
|
lin n8 = mkDigit "осум" "осумнаесет" "осумдесет" "осумсто" ;
|
|
lin n9 = mkDigit "девет" "деветнаесет" "деведесет" "деветсто" ;
|
|
lin pot0 n = {s = n.s; hundred = n.hundred; n = Pl} ;
|
|
lin pot01 = {s = "еден"; hundred = "еднасто"; n = Sg} ;
|
|
lin pot0as1 n = n ;
|
|
lin pot1 n = {s = n.ten; n = Pl} ;
|
|
lin pot110 = {s = "десет"; n = Pl} ;
|
|
lin pot111 = {s = "единаесет"; n = Pl} ;
|
|
lin pot1as2 n = n ;
|
|
lin pot2 n = {s = n.hundred} ;
|
|
lin pot2as3 n = n ;
|
|
lin pot3as4 n = n ;
|
|
lin pot4as5 n = n ;
|
|
}
|