just for fun: Roman numbers in the Latin grammar

This commit is contained in:
krasimir
2009-07-31 11:58:22 +00:00
parent 219f19d265
commit 171556dc9a
4 changed files with 50 additions and 54 deletions

View File

@@ -59,7 +59,7 @@ concrete CatLat of Cat = CommonX ** open ResLat, Prelude in {
---- Numeral ---- Numeral
-- --
-- Numeral = {s : CardOrd => Str ; n : Number} ; -- Numeral = {s : CardOrd => Str ; n : Number} ;
-- Digits = {s : CardOrd => Str ; n : Number ; tail : DTail} ; Digits = {s : Str ; unit : Unit} ;
-- --
---- Structural ---- Structural
-- --

View File

@@ -5,7 +5,7 @@ concrete GrammarLat of Grammar =
VerbLat, VerbLat,
AdjectiveLat, AdjectiveLat,
AdverbLat, AdverbLat,
-- NumeralLat, NumeralLat,
SentenceLat, SentenceLat,
-- QuestionLat, -- QuestionLat,
-- RelativeLat, -- RelativeLat,

View File

@@ -1,4 +1,4 @@
--concrete NumeralLat of Numeral = CatLat ** open ResLat in { concrete NumeralLat of Numeral = CatLat ** open ResLat in {
-- --
--lincat --lincat
-- Digit = {s : DForm => CardOrd => Str} ; -- Digit = {s : DForm => CardOrd => Str} ;
@@ -42,54 +42,47 @@
--lin pot3plus n m = { --lin pot3plus n m = {
-- s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ; -- s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
-- --
---- numerals as sequences of digits -- numerals as sequences of digits
--
-- lincat lincat
-- Dig = TDigit ; Dig = TDigit ;
--
-- lin lin
-- IDig d = d ** {tail = T1} ; IDig d = {s = d.s ! one; unit = ten} ;
--
-- IIDig d i = { IIDig d i = {
-- s = \\o => d.s ! NCard ++ commaIf i.tail ++ i.s ! o ; s = d.s ! i.unit ++ i.s ;
-- n = Pl ; unit = inc i.unit
-- tail = inc i.tail } ;
-- } ;
-- D_0 = mkDig "" "" "" "" "" "" ;
-- D_0 = mkDig "0" ; D_1 = mkDig "I" "X" "C" "M" "(X)" "(C)" ;
-- D_1 = mk3Dig "1" "1st" Sg ; D_2 = mkDig "II" "XX" "CC" "MM" "(XX)" "(CC)" ;
-- D_2 = mk2Dig "2" "2nd" ; D_3 = mkDig "III" "XXX" "CCC" "MMM" "(XXX)" "(CCC)" ;
-- D_3 = mk2Dig "3" "3rd" ; D_4 = mkDig "IV" "XL" "CD" "(IV)" "(XL)" "(CD)" ;
-- D_4 = mkDig "4" ; D_5 = mkDig "V" "L" "D" "(V)" "(L)" "(D)" ;
-- D_5 = mkDig "5" ; D_6 = mkDig "VI" "LX" "DC" "(VI)" "(LX)" "(DC)" ;
-- D_6 = mkDig "6" ; D_7 = mkDig "VII" "LXX" "DCC" "(VII)" "(LXX)" "(DCC)" ;
-- D_7 = mkDig "7" ; D_8 = mkDig "VIII" "LXXX" "DCCC" "(VIII)" "(LXXX)" "(DCCC)" ;
-- D_8 = mkDig "8" ; D_9 = mkDig "IX" "XC" "CM" "(IX)" "(XC)" "(CM)" ;
-- D_9 = mkDig "9" ;
-- oper
-- oper TDigit = {
-- commaIf : DTail -> Str = \t -> case t of { s : Unit => Str
-- T3 => "," ; } ;
-- _ => []
-- } ; mkDig : Str -> Str -> Str -> Str -> Str -> Str -> TDigit =
-- \one,ten,hundred,thousand,ten_thousand,hundred_thousand -> {
-- inc : DTail -> DTail = \t -> case t of { s = table Unit [one;ten;hundred;thousand;ten_thousand;hundred_thousand]
-- T1 => T2 ; } ;
-- T2 => T3 ;
-- T3 => T1 inc : Unit -> Unit = \u ->
-- } ; case u of {
-- one => ten ;
-- mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; ten => hundred ;
-- mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ; hundred => thousand ;
-- thousand => ten_thousand ;
-- mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { ten_thousand => hundred_thousand ;
-- s = table {NCard => c ; NOrd => o} ; hundred_thousand => hundred_thousand
-- n = n } ;
-- } ; }
--
-- TDigit = {
-- n : Number ;
-- s : CardOrd => Str
-- } ;
--
--}

View File

@@ -566,5 +566,8 @@ oper
mkPrep : Str -> Case -> {s : Str ; c : Case} = \s,c -> {s = s ; c = c} ; mkPrep : Str -> Case -> {s : Str ; c : Case} = \s,c -> {s = s ; c = c} ;
param
Unit = one | ten | hundred | thousand | ten_thousand | hundred_thousand ;
} }