summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/summerschool/foods/FoodsMlt.gf141
-rw-r--r--contrib/summerschool/foods/ResMlt.gf71
2 files changed, 104 insertions, 108 deletions
diff --git a/contrib/summerschool/foods/FoodsMlt.gf b/contrib/summerschool/foods/FoodsMlt.gf
index 71da86202..5fcd4de78 100644
--- a/contrib/summerschool/foods/FoodsMlt.gf
+++ b/contrib/summerschool/foods/FoodsMlt.gf
@@ -1,38 +1,105 @@
--- (c) 2011 John Camilleri under LGPL
-
-concrete FoodsMlt of Foods = open Prelude, ResMlt in {
- flags coding=utf8 ;
-
- lincat
- Comment = SS ;
- Quality = {s : Gender => Number => Str} ;
- Kind = {s : Number => Str ; g : Gender} ;
- Item = {s : Str ; g : Gender ; n : Number} ;
-
- lin
- Pred item quality = ss (item.s ++ copula item.n item.g ++ quality.s ! item.g ! item.n) ;
-
- This kind = det Sg "dan" "din" kind ;
- That kind = det Sg "dak" "dik" kind ;
- These kind = det Pl "dawn" "" kind ;
- Those kind = det Pl "dawk" "" kind ;
-
- Mod quality kind = {
- s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
- g = kind.g
- } ;
-
- Wine = noun "inbid" "inbejjed" Masc ;
- Cheese = noun "ġobon" "ġobniet" Masc ;
- Fish = noun "ħuta" "ħut" Fem ;
- Pizza = noun "pizza" "pizzez" Fem ;
-
- Very qual = {s = \\g,n => qual.s ! g ! n ++ "ħafna"} ;
-
- Warm = adjective "sħun" "sħuna" "sħan" ;
- Expensive = adjective "għali" "għalja" "għaljin" ;
- Delicious = adjective "tajjeb" "tajba" "tajbin" ;
- Boring = uniAdj "tad-dwejjaq" ;
- Fresh = regAdj "frisk" ;
- Italian = regAdj "Taljan" ;
+-- (c) 2013 John J. Camilleri under LGPL
+
+concrete FoodsMlt of Foods = open Prelude in {
+ flags coding=utf8 ;
+
+ lincat
+ Comment = SS ;
+ Quality = {s : Gender => Number => Str} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+
+ lin
+ -- Pred item quality = ss (item.s ++ copula item.n item.g ++ quality.s ! item.g ! item.n) ;
+ Pred item quality = ss (item.s ++ quality.s ! item.g ! item.n) ;
+
+ This kind = det Sg "dan" "din" kind ;
+ That kind = det Sg "dak" "dik" kind ;
+ These kind = det Pl "dawn" "" kind ;
+ Those kind = det Pl "dawk" "" kind ;
+
+ Mod quality kind = {
+ s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
+ g = kind.g
+ } ;
+
+ Wine = noun "inbid" "inbejjed" Masc ;
+ Cheese = noun "ġobon" "ġobniet" Masc ;
+ Fish = noun "ħuta" "ħut" Fem ;
+ Pizza = noun "pizza" "pizzez" Fem ;
+
+ Very qual = {s = \\g,n => qual.s ! g ! n ++ "ħafna"} ;
+
+ Warm = adjective "sħun" "sħuna" "sħan" ;
+ Expensive = adjective "għali" "għalja" "għaljin" ;
+ Delicious = adjective "tajjeb" "tajba" "tajbin" ;
+ Boring = uniAdj "tad-dwejjaq" ;
+ Fresh = regAdj "frisk" ;
+ Italian = regAdj "Taljan" ;
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+
+ oper
+ --Create an adjective (full function)
+ --Params: Sing Masc, Sing Fem, Plural
+ adjective : (_,_,_ : Str) -> {s : Gender => Number => Str} = \iswed,sewda,suwed -> {
+ s = table {
+ Masc => table {
+ Sg => iswed ;
+ Pl => suwed
+ } ;
+ Fem => table {
+ Sg => sewda ;
+ Pl => suwed
+ }
+ }
+ } ;
+
+ --Create a regular adjective
+ --Param: Sing Masc
+ regAdj : Str -> {s : Gender => Number => Str} = \frisk ->
+ adjective frisk (frisk + "a") (frisk + "i") ;
+
+ --Create a "uni-adjective" eg tal-buzz
+ --Param: Sing Masc
+ uniAdj : Str -> {s : Gender => Number => Str} = \uni ->
+ adjective uni uni uni ;
+
+ --Create a noun
+ --Params: Singular, Plural, Gender (inherent)
+ noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = \ktieb,kotba,g -> {
+ s = table {
+ Sg => ktieb ;
+ Pl => kotba
+ } ;
+ g = g
+ } ;
+
+ --Copula is a linking verb
+ --Params: Number, Gender
+ -- copula : Number -> Gender -> Str = \n,g -> case n of {
+ -- Sg => case g of { Masc => "huwa" ; Fem => "hija" } ;
+ -- Pl => "huma"
+ -- } ;
+
+ --Create an article, taking into account first letter of next word
+ article = pre {
+ "a"|"e"|"i"|"o"|"u" => "l-" ;
+ --cons@("ċ"|"d"|"n"|"r"|"s"|"t"|"x"|"ż") => "i" + cons + "-" ;
+ _ => "il-"
+ } ;
+
+ --Create a determinant
+ --Params: Sg/Pl, Masc, Fem
+ det : Number -> Str -> Str -> {s : Number => Str ; g : Gender} -> {s : Str ; g : Gender ; n : Number} = \n,m,f,cn -> {
+ s = case n of {
+ Sg => case cn.g of {Masc => m ; Fem => f}; --string
+ Pl => m --default to masc
+ } ++ article ++ cn.s ! n ;
+ g = cn.g ; --gender
+ n = n --number
+ } ;
+
}
diff --git a/contrib/summerschool/foods/ResMlt.gf b/contrib/summerschool/foods/ResMlt.gf
deleted file mode 100644
index 19ba9392c..000000000
--- a/contrib/summerschool/foods/ResMlt.gf
+++ /dev/null
@@ -1,71 +0,0 @@
--- (c) 2011 John Camilleri under LGPL
-
-resource ResMlt = open Prelude in {
- flags coding=utf8 ;
-
- param
- Number = Sg | Pl ;
- Gender = Masc | Fem ;
-
- oper
- --Create an adjective (full function)
- --Params: Sing Masc, Sing Fem, Plural
- adjective : (_,_,_ : Str) -> {s : Gender => Number => Str} = \iswed,sewda,suwed -> {
- s = table {
- Masc => table {
- Sg => iswed ;
- Pl => suwed
- } ;
- Fem => table {
- Sg => sewda ;
- Pl => suwed
- }
- }
- } ;
-
- --Create a regular adjective
- --Param: Sing Masc
- regAdj : Str -> {s : Gender => Number => Str} = \frisk ->
- adjective frisk (frisk + "a") (frisk + "i") ;
-
- --Create a "uni-adjective" eg tal-buzz
- --Param: Sing Masc
- uniAdj : Str -> {s : Gender => Number => Str} = \uni ->
- adjective uni uni uni ;
-
- --Create a noun
- --Params: Singular, Plural, Gender (inherent)
- noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = \ktieb,kotba,g -> {
- s = table {
- Sg => ktieb ;
- Pl => kotba
- } ;
- g = g
- } ;
-
- --Copula is a linking verb
- --Params: Number, Gender
- copula : Number -> Gender -> Str = \n,g -> case n of {
- Sg => case g of { Masc => "huwa" ; Fem => "hija" } ;
- Pl => "huma"
- } ;
-
- --Create an article, taking into account first letter of next word
- article = pre {
- "a"|"e"|"i"|"o"|"u" => "l-" ;
- --cons@("ċ"|"d"|"n"|"r"|"s"|"t"|"x"|"ż") => "i" + cons + "-" ;
- _ => "il-"
- } ;
-
- --Create a determinant
- --Params: Sg/Pl, Masc, Fem
- det : Number -> Str -> Str -> {s : Number => Str ; g : Gender} -> {s : Str ; g : Gender ; n : Number} = \n,m,f,cn -> {
- s = case n of {
- Sg => case cn.g of {Masc => m ; Fem => f}; --string
- Pl => m --default to masc
- } ++ article ++ cn.s ! n ;
- g = cn.g ; --gender
- n = n --number
- } ;
-
-}