summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/uusisuomi/Declensions.gf122
-rw-r--r--examples/uusisuomi/MkLex.hs14
-rw-r--r--examples/uusisuomi/Nominal.gf56
-rw-r--r--examples/uusisuomi/results.txt66
4 files changed, 188 insertions, 70 deletions
diff --git a/examples/uusisuomi/Declensions.gf b/examples/uusisuomi/Declensions.gf
index cd7374022..6bcd1ae06 100644
--- a/examples/uusisuomi/Declensions.gf
+++ b/examples/uusisuomi/Declensions.gf
@@ -10,7 +10,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
let
lujuu = init lujuus ;
lujuuksi = lujuu + "ksi" ;
- a = vowelHarmony (last lujuu) ;
+ a = vowHarmony (last lujuu) ;
in nForms10
lujuus (lujuu + "den") (lujuu + "tt" + a)
(lujuu + "ten" + a) (lujuu + "teen")
@@ -19,7 +19,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dNainen : Str -> NForms = \nainen ->
let
- a = vowelHarmony nainen ;
+ a = vowHarmony nainen ;
nais = Predef.tk 3 nainen + "s"
in nForms10
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
@@ -28,7 +28,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dPuu : Str -> NForms = \puu ->
let
- a = vowelHarmony puu ;
+ a = vowHarmony puu ;
pui = init puu + "i" ;
u = last puu ;
in nForms10
@@ -39,7 +39,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dSuo : Str -> NForms = \suo ->
let
o = last suo ;
- a = vowelHarmony o ;
+ a = vowHarmony o ;
soi = Predef.tk 2 suo + o + "i" ;
in nForms10
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
@@ -59,7 +59,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dKaunis : Str -> NForms = \kaunis ->
let
- a = vowelHarmony kaunis ;
+ a = vowHarmony kaunis ;
kaunii = init kaunis + "i" ;
in nForms10
kaunis (kaunii + "n") (kaunis + "t" + a)
@@ -70,7 +70,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dLiitin : (_,_ : Str) -> NForms = \liitin,liittimen ->
let
- a = vowelHarmony liitin ;
+ a = vowHarmony liitin ;
liittim = Predef.tk 2 liittimen ;
in nForms10
liitin (liittim + "en") (liitin + "t" + a)
@@ -81,7 +81,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dOnneton : Str -> NForms = \onneton ->
let
- a = vowelHarmony onneton ;
+ a = vowHarmony onneton ;
onnettom = Predef.tk 2 onneton + "t" + last (init onneton) + "m" ;
in nForms10
onneton (onnettom + a + "n") (onneton + "t" + a)
@@ -94,7 +94,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dUkko : (_,_ : Str) -> NForms = \ukko,ukon ->
let
o = last ukko ;
- a = vowelHarmony o ;
+ a = vowHarmony o ;
ukk = init ukko ;
uko = init ukon ;
uk = init uko ;
@@ -147,7 +147,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dArpi : (_,_ : Str) -> NForms = \arpi,arven ->
let
- a = vowelHarmony arpi ;
+ a = vowHarmony arpi ;
arp = init arpi ;
arv = Predef.tk 2 arven ;
ar = init arp ;
@@ -172,7 +172,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dRae : (_,_ : Str) -> NForms = \rae,rakeen ->
let
- a = vowelHarmony rae ;
+ a = vowHarmony rae ;
rakee = init rakeen ;
rakei = init rakee + "i" ;
raetta = case <rae : Str> of {
@@ -193,7 +193,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dPaatti : (_,_ : Str) -> NForms = \paatti,paatin ->
let
- a = vowelHarmony paatti ;
+ a = vowHarmony paatti ;
paatte = init paatti + "e" ;
paati = init paatin ;
paate = init paati + "e" ;
@@ -204,7 +204,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dTohtori : (_ : Str) -> NForms = \tohtori ->
let
- a = vowelHarmony tohtori ;
+ a = vowHarmony tohtori ;
tohtor = init tohtori ;
in nForms10
tohtori (tohtori+"n") (tohtori + a) (tohtori + "n" + a) (tohtori + "in")
@@ -213,7 +213,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren ->
let
- a = vowelHarmony piennar ;
+ a = vowHarmony piennar ;
pientar = Predef.tk 2 pientaren ;
in nForms10
piennar pientaren (piennar +"t" + a)
@@ -223,7 +223,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dUnix : (_ : Str) -> NForms = \unix ->
let
- a = vowelHarmony unix ;
+ a = vowHarmony unix ;
unixi = unix + "i" ;
unixe = unix + "e" ;
in nForms10
@@ -233,7 +233,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dNukke : (_,_ : Str) -> NForms = \nukke,nuken ->
let
- a = vowelHarmony nukke ;
+ a = vowHarmony nukke ;
nukk = init nukke ;
nuke = init nuken ;
in
@@ -244,7 +244,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
dJalas : Str -> NForms = \jalas ->
let
- a = vowelHarmony jalas ;
+ a = vowHarmony jalas ;
jalaks = init jalas + "ks" ;
jalaksi = jalaks + "i" ;
in nForms10
@@ -281,6 +281,29 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
(SDP + ":" + c.p4) (SDP + ":" + c.p5) (SDP + ":" + c.p6)
(SDP + ":" + c.p7) (SDP + ":" + c.p8) (SDP + ":" + c.p9) ;
+-- for adjective comparison
+
+ dSuurempi : Str -> NForms = \suurempi ->
+ let
+ a = vowHarmony suurempi ;
+ suuremp = init suurempi ;
+ suuremm = Predef.tk 2 suurempi + "m" ;
+ in nForms10
+ suurempi (suuremm + a + "n") (suuremp + a + a)
+ (suuremp + a + "n" + a) (suuremp + a + a + "n")
+ (suuremp + "ien") (suurempi + a)
+ (suurempi + "n" + a) (suuremm + "iss" + a) (suurempi + "in") ;
+
+ dSuurin : Str -> NForms = \suurin ->
+ let
+ a = vowHarmony suurin ;
+ suurimm = init suurin + "mm" ;
+ suurimp = init suurimm + "p" ;
+ in nForms10
+ suurin (suurimm + a + "n") (suurin + "t" + a)
+ (suurimp + a + "n" + a) (suurimp + a + a + "n")
+ (suurimp + "ien") (suurimp + "i" + a)
+ (suurimp + "in" + a) (suurimm + "iss" + a) (suurimp + "iin") ;
-------------------
@@ -365,8 +388,60 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
lock_N = <>
} ;
+ n2nforms : N -> NForms = \ukko -> table {
+ 0 => ukko.s ! NCase Sg Nom ;
+ 1 => ukko.s ! NCase Sg Gen ;
+ 2 => ukko.s ! NCase Sg Part ;
+ 3 => ukko.s ! NCase Sg Ess ;
+ 4 => ukko.s ! NCase Sg Illat ;
+ 5 => ukko.s ! NCase Pl Gen ;
+ 6 => ukko.s ! NCase Pl Part ;
+ 7 => ukko.s ! NCase Pl Ess ;
+ 8 => ukko.s ! NCase Pl Iness ;
+ 9 => ukko.s ! NCase Pl Illat
+ } ;
+
+-- Adjective forms
+
+ AForms : Type = {
+ posit : NForms ;
+ compar : NForms ;
+ superl : NForms ;
+ adv_posit, adv_compar, adv_superl : Str ;
+ } ;
+
+ aForms2A : AForms -> A = \afs -> {
+ s = table {
+ Posit => table {
+ AN n => (nForms2N afs.posit).s ! n ;
+ AAdv => afs.adv_posit
+ } ;
+ Compar => table {
+ AN n => (nForms2N afs.compar).s ! n ;
+ AAdv => afs.adv_compar
+ } ;
+ Superl => table {
+ AN n => (nForms2N afs.superl).s ! n ;
+ AAdv => afs.adv_superl
+ }
+ } ;
+ lock_A = <>
+ } ;
+
+ nforms2aforms : NForms -> AForms = \nforms ->
+ let
+ suure = init (nforms ! 1) ;
+ suur = Predef.tk 4 (nforms ! 8) ;
+ in {
+ posit = nforms ;
+ compar = dSuurempi (suure ++ "mpi") ;
+ superl = dSuurin (suur ++ "in") ;
+ adv_posit = suure + "sti" ;
+ adv_compar = suure + "mmin" ;
+ adv_superl = suur + "immin" ;
+ } ;
---- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc.
+-- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc.
strongGrade : Str -> Str = \hanke ->
let
@@ -388,16 +463,9 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
ase => ase
} ;
- part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of {
- sav + "i" + a@("a" | "ä") =>
- <sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
- elio + "it" + a@("a" | "ä") =>
- <elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
- maal + "ej" + a@("a" | "ä") =>
- <maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
- talo + "j" + a@("a" | "ä") =>
- <talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
- _ => Predef.error (["impossible plural partitive"] ++ savia)
+ vowHarmony : Str -> Str = \s -> case s of {
+ _ + ("a" | "o" | "u") + _ => "a" ;
+ _ => "ä"
} ;
}
diff --git a/examples/uusisuomi/MkLex.hs b/examples/uusisuomi/MkLex.hs
index 304fd8b1f..9e35e88a0 100644
--- a/examples/uusisuomi/MkLex.hs
+++ b/examples/uusisuomi/MkLex.hs
@@ -54,33 +54,33 @@ mkLex 0 line = case words line of
mkLex 1 line = case words line of
num:sana:_ -> do
let nimi = "n" ++ init num ++ "_" ++ sana
- putStrLn $ "lin " ++ nimi ++ "_N = mk1N \"" ++ sana ++ "\" ;"
+ putStrLn $ "lin " ++ nimi ++ "_N = mkN \"" ++ sana ++ "\" ;"
_ -> return ()
mkLex 2 line = case words line of
num:sana:sanan:_ -> do
let nimi = "n" ++ init num ++ "_" ++ sana
putStrLn $ "lin " ++ nimi ++
- "_N = mk2N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" ;"
+ "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++ "\" ;"
_ -> return ()
mkLex 3 line = case words line of
num:sana:sanan:_:_:_:_:sanoja:_ -> do
let nimi = "n" ++ init num ++ "_" ++ sana
putStrLn $ "lin " ++ nimi ++
- "_N = mk3N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" \"" ++ sanoja ++ "\" ;"
+ "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++ "\" \"" ++ sanoja ++ "\" ;"
_ -> return ()
mkLex 4 line = case words line of
num:sana:sanan:sanaa:_:_:_:sanoja:_ -> do
let nimi = "n" ++ init num ++ "_" ++ sana
putStrLn $ "lin " ++ nimi ++
- "_N = mk4N \"" ++ sana ++ "\" \"" ++ sanan ++
- "\" \"" ++ sanaa ++ "\" \"" ++ sanoja ++ "\" ;"
+ "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++
+ "\" \"" ++ sanoja ++ "\" \"" ++ sanaa ++ "\" ;"
_ -> return ()
--- to initiate from a noun list
+-- to initiate from a noun list that has compounds
mkLex 11 line = case words line of
_:"--":_ -> return ()
@@ -88,7 +88,7 @@ mkLex 11 line = case words line of
let sana = uncompound sana0
let nimi = "n" ++ init num ++ "_" ++ sana
putStrLn $ "fun " ++ nimi ++ "_N : N ;"
- putStrLn $ "lin " ++ nimi ++ "_N = mk1N \"" ++ sana ++ "\" ;"
+ putStrLn $ "lin " ++ nimi ++ "_N = mkN \"" ++ sana ++ "\" ;"
_ -> return ()
-- from sora+tie to tie
diff --git a/examples/uusisuomi/Nominal.gf b/examples/uusisuomi/Nominal.gf
index e9eee3c6a..349c7dae2 100644
--- a/examples/uusisuomi/Nominal.gf
+++ b/examples/uusisuomi/Nominal.gf
@@ -6,13 +6,49 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in {
oper
--- mkN = overload {
- mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ;
- mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ;
- mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ;
- mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
+ mkN : overload {
+ mkN : (talo : Str) -> N ;
+ mkN : (talo,talon : Str) -> N ;
+ mkN : (talo,talon,taloja : Str) -> N ;
+ mkN : (talo,talon,taloja,taloa : Str) -> N ;
+ mkN : (sora : Str) -> (tie : N) -> N ;
+ mkN : (oma : N) -> (tunto : N) -> N ;
+ } ;
+
+ mkA : overload {
+ mkA : Str -> A ;
+ mkA : N -> A ;
+ mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A ;
+ } ;
+
+
+ mkN = overload {
+ mkN : (talo : Str) -> N = mk1N ;
+ -- \s -> nForms2N (nForms1 s) ;
+ mkN : (talo,talon : Str) -> N = mk2N ;
+ -- \s,t -> nForms2N (nForms2 s t) ;
+ mkN : (talo,talon,taloja : Str) -> N = mk3N ;
+ -- \s,t,u -> nForms2N (nForms3 s t u) ;
+ mkN : (talo,talon,taloja,taloa : Str) -> N = mk4N ;
+ -- \s,t,u,v -> nForms2N (nForms4 s t u v) ;
+ mkN : (sora : Str) -> (tie : N) -> N = mkStrN ;
+ mkN : (oma,tunto : N) -> N = mkNN ;
+ } ;
+
+ mk1A : Str -> A = \jalo -> aForms2A (nforms2aforms (nForms1 jalo)) ;
+ mkNA : N -> A = \suuri -> aForms2A (nforms2aforms (n2nforms suuri)) ;
+
+ mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ;
+ mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ;
+ mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ;
+ mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
nForms2N (nForms4 s t u v) ;
--- } ;
+ mkStrN : Str -> N -> N = \sora,tie -> {
+ s = \\c => sora + tie.s ! c ; lock_N = <>
+ } ;
+ mkNN : N -> N -> N = \oma,tunto -> {
+ s = \\c => oma.s ! c + tunto.s ! c ; lock_N = <>
+ } ; ---- TODO: oma in possessive suffix forms
nForms1 : Str -> NForms = \ukko ->
let
@@ -63,6 +99,8 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in {
nForms1 ukko ; --- to protect
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
dUkko ukko ukon ; -- auto,auton
+ <_ + "mpi", _ + ("emman" | "emmän")> => dSuurempi ukko ;
+ <_ + "in", _ + ("imman" | "immän")> => dSuurin ukko ;
<arp + "i", arv + "en"> => dArpi ukko ukon ;
--- <arp + "i", _ + "i" + ("a" | "ä")> => -- for b-w compat.
--- dArpi ukko (init (weakGrade ukko) + "en") ;
@@ -99,11 +137,11 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in {
(["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
} ;
- nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoa,ukkoja ->
+ nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja,ukkoa ->
let
ukot = nForms3 ukko ukon ukkoja ;
in
- case <ukko,ukon,ukkoa,ukkoja> of {
+ case <ukko,ukon,ukkoja,ukkoa> of {
<_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> =>
table {
2 => ukkoa ;
@@ -112,7 +150,7 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in {
_ =>
Predef.error
(["last arguments should end in n, a/ä, and a/ä, not"] ++
- ukon ++ ukkoa ++ ukkoja)
+ ukon ++ ukkoja ++ ukkoa)
} ;
}
diff --git a/examples/uusisuomi/results.txt b/examples/uusisuomi/results.txt
index e26fe7457..9e83076a5 100644
--- a/examples/uusisuomi/results.txt
+++ b/examples/uusisuomi/results.txt
@@ -1,34 +1,46 @@
-Fri Jan 4 10:50:06 CET 2008
-aarne-rantas-computer:~/GF/examples/uusisuomi aarne$ export LEX=NSSK ; make -e
+aarne-rantas-computer:~/GF/examples/uusisuomi aarne$ make
NSSK
- 52 diff1.txt
- 36 diff2.txt
- 28 diff3.txt
- 21 diff4.txt
-
Omat
- 45 diff1.txt
- 23 diff2.txt
- 14 diff3.txt
- 7 diff4.txt ruis, ainoa, vapaa, kirves, mies, kevät, sydän
+Dictionary:
+ (Aino Wuolle, Suomalais-englantilainen sanakirja, 11. painos WSOY 1973,
+ ca. 24k Words)
+Duodecim
+Aino
+
+Fri Jan 4 18:24:29 CET 2008
+Aino
+ 7 diff1-Aino.txt
+ 2 diff2-Aino.txt
+ 0 diff3-Aino.txt
+ 0 diff4-Aino.txt
-Dictionary
-(Aino Wuolle, Suomalais-englantilainen sanakirja, 11. painos WSOY 1973,
-ca. 24k Words)
- 29 diff1.txt
- 14 diff2.txt
- 1 diff3.txt päitsi-päistä
- 0 diff4.txt
+Dictionary
+ 15 diff1-Dictionary.txt
+ 10 diff2-Dictionary.txt
+ 1 diff3-Dictionary.txt
+ 0 diff4-Dictionary.txt
Duodecim
- 20 diff1.txt
- 8 diff2.txt
- 3 diff3.txt
- 1 diff4.txt kevät
+ 17 diff1-Duodecim.txt
+ 8 diff2-Duodecim.txt
+ 3 diff3-Duodecim.txt
+ 1 diff4-Duodecim.txt
-Aino
- 7 diff1.txt
- 2 diff2.txt
- 0 diff3.txt
- 0 diff4.txt
+NSSK
+ 50 diff1-NSSK.txt
+ 32 diff2-NSSK.txt
+ 26 diff3-NSSK.txt
+ 19 diff4-NSSK.txt
+
+Omat
+ 42 diff1-Omat.txt
+ 21 diff2-Omat.txt
+ 14 diff3-Omat.txt
+ 7 diff4-Omat.txt
+
+Swadesh
+ 31 diff1-Swadesh.txt
+ 7 diff2-Swadesh.txt
+ 7 diff3-Swadesh.txt
+ 2 diff4-Swadesh.txt