blob: 61710759c42a43fd5766d968ea7ea410df0c984c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
--# -path=alltenses
-- (c) 2009 Dana Dannells under LGPL
concrete FoodsHeb 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 ++ quality.s ! item.g ! item.n) ;
This = det Sg "זה" "זאת";
That = det Sg "הוא" "היא" ;
These = det Pl "אלה" "אלה" ;
Those = det Pl "הם" "הן" ;
Mod quality kind = {
s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
g = kind.g
} ;
Wine = regNoun "יין" "יינות"Fem ;
Cheese = regNoun "גבינה" "גבינות" Fem ;
Fish = regNoun "דג" "דגים" Masc ;
Pizza = regNoun "פיצה" "פיצוי" Fem ;
Very qual = {s = \\g,n => "מאוד" ++ qual.s ! g ! n} ;
Fresh = regAdj "טרי" ;
Warm = regAdj "חם" ;
Italian = irregAdj "איטלקי" ;
Expensive = regAdj "יקר" ;
Delicious = irregAdj "נהדר" ;
Boring = regAdj "משעמם";
param
Number = Sg | Pl ;
Gender = Masc | Fem ;
oper
det : Number -> Str -> Str -> {s : Number => Str ; g :Gender} ->
{s : Str ; g :Gender ; n : Number} =
\n,m,f,cn -> {
s = cn.s ! n ++ case cn.g of {Masc => m ; Fem => f} ;
g = cn.g ;
n = n
} ;
regNoun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
\gvina,gvinot,g -> {s = table {
Sg => gvina ;
Pl => gvinot
};
g=g
} ;
replaceLastLetter : Str -> Str = \s ->
init s + case last s of {
"מ" => "ם" ; "ן" => "נ" ; "פ" => "ף" ; "ץ" => "צ" ; "כ" => "ך" ; c => c
} ;
adjective : (_,_,_,_ : Str) -> {s : Gender => Number => Str} =
\tov,tova,tovim,tovot -> {
s = table {
Masc => table {
Sg => tov ;
Pl => tovim
} ;
Fem => table {
Sg => tova ;
Pl => tovot
}
}
} ;
regAdj : Str -> {s : Gender => Number => Str} = \tov ->
case tov of { to + c@? =>
adjective tov (replaceLastLetter (to + c + "ה" )) (replaceLastLetter (to + c +"ים" )) (replaceLastLetter (to + c + "ות" ))};
irregAdj : Str -> {s : Gender => Number => Str} = \italki ->
case italki of { italk+ c@? =>
adjective italki (replaceLastLetter (italk + c +"ת" )) (replaceLastLetter (italk + c+ "ים" )) (replaceLastLetter (italk + c+ "ות" ))};
} -- FoodsHeb
|