1
0
forked from GitHub/gf-core

German numerals and almost all Basic

This commit is contained in:
aarne
2006-01-17 19:15:13 +00:00
parent b80f737013
commit 89cd3d352d
10 changed files with 187 additions and 176 deletions

View File

@@ -7,7 +7,7 @@ flags
lin
airplane_N = regN "Flugzeug" ;
already_Adv = ss "schon" ;
already_Adv = mkAdv "schon" ;
answer_V2S = mkV2S (regV "antworten") datPrep ;
apartment_N = regN "Wohnung" ;
apple_N = reg2N "Apfel" "Äpfel" masculine ;
@@ -127,102 +127,101 @@ lin
narrow_A = regA "schmal" ;
new_A = regA "neu" ;
newspaper_N = regN "Zeitung" ;
{-
oil_N = regN "Öl" ; ----
old_A = mkA "alt" "gammalt" "gamla" "gamla" "äldre" "äldst" "äldsta" ;
open_V2 = dirV2 (regV "öppna") ;
paint_V2A = mkV2A (regV "måla") [] ;
paper_N = mkN "papper" "pappret" "papper" "pappren" ;
peace_N = regN "fred" ; ---- ar?
pen_N = regN "penna" ;
planet_N = reg2N "planet" "planeter" ;
plastic_N = reg2N "plast" "plaster" ;
play_V2 = dirV2 (regV "spela") ;
policeman_N = reg2N "polis" "poliser" ;
priest_N = reg2N "präst" "präster" ;
probable_AS = mkAS (regA "sannolik") ;
queen_N = regN "drottning" ;
radio_N = regN "radio" ; ----
rain_V0 = mkV0 (regV "regna") ;
read_V2 = dirV2 (mk2V "läsa" "läste") ;
red_A = mk2A "röd" "rött" ;
religion_N = reg2N "religion" "religioner" ;
restaurant_N = reg2N "restaurang" "restauranger" ;
river_N = mkN "å" "ån" "åar" "åarna" ;
rock_N = regN "sten" ;
roof_N = regN "tak" ;
rubber_N = mkN "gummi" "gummit" "gummin" "gummina" ;
run_V = (irregV "springa" "sprang" "sprungit") ;
say_VS = mkVS (mkV "säga" "säger" "säg" "sade" "sagt" "sagd") ;
school_N = regN "skola";
science_N = reg2N "vetenskap" "vetenskaper" ;
sea_N = mkN "sjö" "sjön" "sjöar" "sjöarna" ;
seek_V2 = dirV2 (mk2V "söka" "sökte") ;
see_V2 = dirV2 (mkV "se" "ser" "se" "såg" "sett" "sedd") ;
sell_V3 = dirV3 (irregV "sälja" "sålde" "sålt") "till" ;
send_V3 = dirV3 (regV "skicka") "till" ;
sheep_N = reg2N "får" "får" ;
ship_N = regN "skepp" ;
shirt_N = regN "skjorta" ;
shoe_N = regN "sko" ;
shop_N = reg2N "affär" "affären" ;
short_A = regA "kort" ;
silver_N = mkN "silver" "silvret" "silver" "silvren" ;
sister_N = reg2N "syster" "systrar" ;
sleep_V = (irregV "sova" "sov" "sovit") ;
small_A = mkA "liten" "litet" "lilla" "små" "mindre" "minst" "minsta" ;
snake_N = regN "orm" ;
sock_N = regN "strumpa" ;
speak_V2 = dirV2 (regV "tala") ;
star_N = regN "stjärna" ;
steel_N = regN "stål" ;
stone_N = regN "sten" ;
stove_N = regN "spis" ;
student_N = reg2N "student" "studenter" ;
stupid_A = mk3A "dum" "dumt" "dumma" ;
sun_N = regN "sol" ;
switch8off_V2 = dirV2 (partV (irregV "stänga" "stängde" "stängt") "av") ;
switch8on_V2 = dirV2 (partV (irregV "slå" "slog" "slagit") "på") ;
table_N = regN "bord" ;
talk_V3 = mkV3 (regV "prata") "till" "om" ;
teacher_N = reg2N "lärare" "lärare" ;
teach_V2 = dirV2 (regV "undervisa") ;
television_N = reg2N "television" "televisioner" ;
thick_A = regA "tjock" ;
thin_A = mk2A "tunn" "tunt" ;
train_N = regN "tåg" ;
travel_V = mk2V "resa" "reste" ;
tree_N = regN "träd" ;
old_A = mkA "alt" "alt" "älter" "ältest" ;
open_V2 = dirV2 (regV "öffnen") ;
paint_V2A =
mkV2A (irregV "streichen" "streicht" "strich" "striche" "gestrichen") accPrep ; ----
paper_N = reg2N "Papier" "Papiere" neuter ;
peace_N = regN "Frieden" ; ----
pen_N = regN "Bleistift" ; ----
planet_N = regN "Planete" ; ----
plastic_N = reg2N "Plastik" "Plastiken" feminine ; ----
play_V2 = dirV2 (regV "spielen") ;
policeman_N = reg2N "Polizist" "Polizisten" masculine ;
priest_N = regN "Priest" ; ----
probable_AS = mkAS (regA "wahrscheinlich") ;
queen_N = reg2N "Königin" "königinnen" feminine ;
radio_N = reg2N "Radio" "Radios" neuter ; ----
rain_V0 = mkV0 (regV "regnen") ;
read_V2 = dirV2 (irregV "lesen" "liest" "las" "läse" "gelesen") ;
red_A = regA "rot" ;
religion_N = regN "Religion" ;
restaurant_N = reg2N "Restaurant" "Restaurants" neuter ;
river_N = reg2N "Fluß" "Flüße" masculine ;
rock_N = regN "Stein" ;
---- roof_N = regN "tak" ;
---- rubber_N = mkN "gummi" "gummit" "gummin" "gummina" ;
run_V = seinV (irregV "laufen" "läuft" "lief" "liefe" "gelaufen") ;
say_VS = mkVS (regV "sagen") ;
school_N = regN "Schule";
science_N = reg2N "Wissenschaft" "Wissenschaften" feminine ;
sea_N = reg2N "Meer" "Meere" neuter ;
seek_V2 = dirV2 (regV "suchen") ;
see_V2 = dirV2 (irregV "sehen" "sieht" "sah" "sähe" "gesehen") ;
sell_V3 = accdatV3 (regV "verkaufen") ;
send_V3 = accdatV3 (regV "schicken") ;
sheep_N = reg2N "Schaf" "Schäfe" feminine ; ----
ship_N = regN "Schiff" ; ----
shirt_N = reg2N "Hemd" "Hemde" neuter ; ----
shoe_N = regN "Schuh" ;
shop_N = reg2N "Laden" "Läden" masculine ;
short_A = regA "kurz" ;
silver_N = reg2N "Silber" "Silber" neuter ; ----
sister_N = reg2N "Schwester" "Schwester" feminine ;
sleep_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ;
small_A = regA "Klein" ;
snake_N = regN "Schlange" ;
sock_N = reg2N "Strumpf" "Strümpfe" masculine ; ----
speak_V2 = dirV2 (irregV "sprechen" "spricht" "sprach" "spräche" "gesprochen") ;
star_N = regN "Sterne" ;
steel_N = regN "Stahl" ; ----
stone_N = regN "Stein" ; ----
---- stove_N = regN "spis" ;
student_N = reg2N "Student" "Studenten" masculine ;
stupid_A = mkA "dumm" "dumm" "dümmer" "dümmst" ; ----
sun_N = regN "Sonne" ;
switch8off_V2 = dirV2 (prefixV "aus" (regV "schalten")) ;
switch8on_V2 = dirV2 (prefixV "ein" (regV "schalten")) ;
table_N = regN "Tisch" ;
talk_V3 = mkV3 (regV "reden") datPrep von_Prep ;
teacher_N = reg2N "Lehrer" "Lehrer" masculine ;
teach_V2 = dirV2 (no_geV (regV "unterrichten")) ;
television_N = reg2N "Ferhsehen" "Fernsehen" neuter;
thick_A = regA "dick" ;
thin_A = regA "dünn" ;
train_N = reg2N "Zug" "Züge" masculine ;
travel_V = regV "reisen" ;
tree_N = reg2N "Baum" "Bäume" masculine ; ----
---- trousers_N = regN "trousers" ; ---- pl t !
ugly_A = regA "ful" ;
understand_V2 = dirV2 (mkV "rstå" "rstår" "förstå" "rstod" "rstått" "rstådd") ;
university_N = regN "universitet" ;
village_N = mkN "by" "byn" "byar" "byarna" ;
wait_V2 = mkV2 (regV "vänta") "på" ;
walk_V = (mkV "gå" "går" "gå" "gick" "gått" "gången") ;
warm_A = regA "varm" ;
war_N = regN "krig" ;
watch_V2 = mkV2 (regV "titta") "på" ;
water_N = mkN "vatten" "vattnet" "vatten" "vattnen" ;
white_A = regA "vit" ;
window_N = mkN "nster" "fönstret" "fönster" "fönstren" ;
wine_N = mkN "vin" "vinet" "viner" "vinerna" ; ----
win_V2 = dirV2 (irregV "vinna" "vann" "vunnit") ;
woman_N = regN "kvinna" ;
wonder_VQ = mkVQ (regV "undra") ;
wood_N = mkN "trä" "träet" "träen" "träena" ; ---- ?
write_V2 = dirV2 (irregV "skriva" "skrev" "skrivit") ;
yellow_A = regA "gul" ;
young_A = irregA "ung" "yngre" "yngst" ;
ugly_A = regA "häßlich" ;
understand_V2 = dirV2 (irregV "verstehen" "versteht" "verstand" "verstände" "verstanden") ;
university_N = reg2N "Universitet" "Universiteten" feminine ;
village_N = reg2N "Dorf" "Dörfer" neuter ;
wait_V2 = mkV2 (regV "warten") (mkPrep "auf" accusative) ;
walk_V = seinV (irregV "gehen" "geht" "ging" "ginge" "gegangen") ;
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
war_N = regN "Krieg" ; ----
watch_V2 = mkV2 (regV "schauen") (mkPrep "an" accusative) ;
water_N = reg2N "Wasser" "Wasser" neuter ;
white_A = regA "weiß" ;
window_N = reg2N "Fenster" "Fenster" neuter ; ----
wine_N = regN "Wein" ;
win_V2 = dirV2 (irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen") ; ----
woman_N = reg2N "Frau" "Frauen" feminine ;
wonder_VQ = mkVQ (reflV (regV "wundern") accusative) ; ----
wood_N = reg2N "Holz" "Hölzer" neuter ; ----
write_V2 = dirV2 (irregV "schreiben" "schreibt" "schrieb" "schriebe" "geschrieben") ;
yellow_A = regA "gelb" ;
young_A = mkA "jung" "jung" "jünger" "ngst" ;
do_V2 = dirV2 (irregV "tun" "tut" "tat" "täte" "getan") ;
now_Adv = mkAdv "jetzt" ;
song_N = reg2N "Lied" "Lieder" neuter ;
-- add_V3 = mkV3 (partV (irregV "lägga" "lade" "lagt") "till") [] "till" ;
number_N = reg2N "Zahl" "Zahlen" feminine ;
put_V2 = dirV2 (regV "setzen") ;
stop_V = seinV (irregV "halten" "hält" "hielt" "hielte" "gehalten") ;
-- jump_V = regV "hoppa" ;
do_V2 = dirV2 (mkV "göra" "gör" "gör" "gjorde" "gjort" "gjord") ;
now_Adv = mkAdv "nu" ;
already_Adv = mkAdv "redan" ;
song_N = reg2N "sång" "sånger" ;
add_V3 = mkV3 (partV (irregV "lägga" "lade" "lagt") "till") [] "till" ;
number_N = mkN "nummer" "numret" "numren" "numren" ;
put_V2 = mkV2 (mkV "sätta" "sätter" "sätt" "satte" "satt" "satt") [] ;
stop_V = regV "stanna" ;
jump_V = regV "hoppa" ;
-}
} ;

View File

@@ -51,7 +51,7 @@ concrete CatGer of Cat = open ResGer, Prelude in {
Det = {s : Gender => Case => Str ; n : Number ; a : Adjf} ;
QuantSg, QuantPl = {s : Gender => Case => Str ; a : Adjf} ;
Predet = {s : Number => Gender => Case => Str} ;
Num = {s : Gender => Case => Str} ;
Num = {s : Str} ;
Ord = {s : AForm => Str} ;
-- Adverb
@@ -60,7 +60,7 @@ concrete CatGer of Cat = open ResGer, Prelude in {
-- Numeral
Numeral = {s : CardOrd => Str ; n : Number} ;
Numeral = {s : CardOrd => Str} ;
-- Structural

View File

@@ -5,7 +5,7 @@ concrete LangGer of Lang =
VerbGer,
AdjectiveGer,
AdverbGer,
-- NumeralGer,
NumeralGer,
SentenceGer,
QuestionGer,
RelativeGer,

View File

@@ -61,5 +61,32 @@ oper
_ => Predef.tk 2 v
} ;
-- For $Numeral$.
LinDigit = {s : DForm => CardOrd => Str} ;
cardOrd : Str -> Str -> CardOrd => Str = \drei,dritte ->
table {
NCard => drei ;
NOrd a => (regA (init dritte)).s ! Posit ! a
} ;
cardReg : Str -> CardOrd => Str = \zehn ->
cardOrd zehn (zehn + "te") ;
mkDigit : (x1,_,_,x4 : Str) -> LinDigit =
\drei,dreizehn,dreissig,dritte ->
{s = table {
DUnit => cardOrd drei dritte ;
DTeen => cardReg dreizehn ;
DTen => cardOrd dreissig (dreissig + "ste")
}
} ;
regDigit : Str -> LinDigit = \vier ->
mkDigit vier (vier + "zehn") (vier + "zig") (vier + "te") ;
invNum : CardOrd = NCard ;
} ;

View File

@@ -37,7 +37,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
a = quant.a
in {
s = \\g,c => quant.s ! g ! c ++
num.s ! g ! c ++ ord.s ! agrAdj g (adjfCase a c) n c ;
num.s ++ ord.s ! agrAdj g (adjfCase a c) n c ;
n = n ;
a = a
} ;
@@ -54,16 +54,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
a = Weak
} ;
NoNum = {s = \\_,_ => []} ;
NoNum = {s = []} ;
NoOrd = {s = \\_ => []} ;
NumInt n = {s = \\_,_ => n.s} ;
NumInt n = {s = n.s} ;
OrdInt n = {s = \\_ => n.s ++ "."} ;
NumNumeral numeral = {s = \\_,_ => numeral.s ! NCard} ;
NumNumeral numeral = {s = numeral.s ! NCard} ;
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;
AdNum adn num = {s = \\g,c => adn.s ++ num.s ! g ! c} ;
AdNum adn num = {s = adn.s ++ num.s} ;
OrdSuperl a = {s = a.s ! Superl} ;

View File

@@ -1,44 +1,46 @@
--concrete NumeralGer of Numeral = CatGer ** open ResGer in {
--
--lincat
-- Digit = {s : DForm => CardOrd => Str} ;
-- Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
-- Sub100 = {s : CardOrd => Str ; n : Number} ;
-- Sub1000 = {s : CardOrd => Str ; n : Number} ;
-- Sub1000000 = {s : CardOrd => Str ; n : Number} ;
--
--lin num x = x ;
--lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in
-- {s = \\f,c => case <f,c> of {
-- <teen,NOrd> => "twelfth" ;
-- _ => two.s ! f ! c
-- }
-- } ;
--
--lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
--lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;
--lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
--lin n6 = regNum "six" ;
--lin n7 = regNum "seven" ;
--lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;
--lin n9 = regNum "nine" ;
--
--lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;
--lin pot0 d = d ** {n = Pl} ;
--lin pot110 = regCardOrd "ten" ** {n = Pl} ;
--lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
--lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
--lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
--lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
--lin pot1plus d e = {
-- s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ;
--lin pot1as2 n = n ;
--lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ;
--lin pot2plus d e = {
-- s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ;
--lin pot2as3 n = n ;
--lin pot3 n = {
-- s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
--lin pot3plus n m = {
-- s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
--}
concrete NumeralGer of Numeral = CatGer ** open MorphoGer in {
lincat
Digit = {s : DForm => CardOrd => Str} ;
Sub10 = {s : DForm => CardOrd => Str} ;
Sub100, Sub1000, Sub1000000 =
{s : CardOrd => Str} ;
lin
num x = x ;
n2 = mkDigit "zwei" "zwölf" "zwanzig" "zweite" ;
n3 = mkDigit "drei" "dreizehn" "dreissig" "dritte" ;
n4 = regDigit "vier" ;
n5 = regDigit "fünf" ;
n6 = regDigit "sechs" ;
n7 = mkDigit "sieben" "siebzehn" "siebzig" "siebte" ;
n8 = mkDigit "acht" "achzehn" "achzig" "achte" ;
n9 = regDigit "neun" ;
pot01 = {
s = \\f => table {
NCard => "ein" ; ----
NOrd af => (regA "erst").s ! Posit ! af
} ;
n = Sg
} ;
pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ;
pot110 = {s = cardReg "zehn"} ;
pot111 = {s = cardReg "elf"} ;
pot1to19 d = {s = d.s ! DTeen} ;
pot0as1 n = {s = n.s ! DUnit} ;
pot1 d = {s = d.s ! DTen} ;
pot1plus d e = {s = \\g => e.s ! DUnit ! invNum ++ "und" ++ d.s ! DTen ! g} ;
pot1as2 n = n ;
pot2 d =
{s = \\g => d.s ! DUnit ! invNum ++ cardOrd "hundert" "hunderte" ! g} ;
pot2plus d e =
{s = \\g => d.s ! DUnit ! invNum ++ "hundert" ++ e.s ! g} ;
pot2as3 n = n ;
pot3 n =
{s = \\g => n.s ! invNum ++ cardOrd "tausend" "tausendte" ! g} ; ----
pot3plus n m =
{s = \\g => n.s ! invNum ++ "tausend" ++ m.s ! g ; n = Pl} ;
}

View File

@@ -122,6 +122,13 @@ oper
mkA2 : A -> Prep -> A2 ;
--2 Adverbs
-- Adverbs are just strings.
mkAdv : Str -> Adv ;
--2 Prepositions
-- A preposition is formed from a string and a case.
@@ -301,6 +308,8 @@ oper
mkA2 = \a,p -> a ** {c2 = p ; lock_A2 = <>} ;
mkAdv s = {s = s ; lock_Adv = <>} ;
mkPrep s c = {s = s ; c = c ; lock_Prep = <>} ;
accPrep = mkPrep [] accusative ;
datPrep = mkPrep [] dative ;

View File

@@ -73,7 +73,7 @@ resource ParamGer = ParamX ** {
--2 For $Numeral$
CardOrd = NCard | NOrd AForm ;
DForm = unit | teen | ten ;
DForm = DUnit | DTeen | DTen ;
--2 Transformations between parameter types

View File

@@ -61,7 +61,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer in {
n = idet.n
in {
s = \\c =>
idet.s ! g ! c ++ num.s ! g ! c ++ ord.s ! agrAdj g Weak n c ++
idet.s ! g ! c ++ num.s ++ ord.s ! agrAdj g Weak n c ++
cn.s ! Weak ! n ! c ;
n = n
} ;

View File

@@ -385,30 +385,4 @@ resource ResGer = ParamGer ** open Prelude in {
infPart : Bool -> Str = \b -> if_then_Str b [] "zu" ;
-- For $Numeral$.
--
-- mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
-- \two, twelve, twenty, second ->
-- {s = table {
-- unit => table {NCard => two ; NOrd => second} ;
-- teen => \\c => mkCard c twelve ;
-- ten => \\c => mkCard c twenty
-- }
-- } ;
--
-- regNum : Str -> {s : DForm => CardOrd => Str} =
-- \six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ;
--
-- regCardOrd : Str -> {s : CardOrd => Str} = \ten ->
-- {s = table {NCard => ten ; NOrd => regOrd ten}} ;
--
-- mkCard : CardOrd -> Str -> Str = \c,ten ->
-- (regCardOrd ten).s ! c ;
--
-- regOrd : Str -> Str = \ten ->
-- case last ten of {
-- "y" => init ten + "ieth" ;
-- _ => ten + "th"
-- } ;
--
}