muutuja (s¨unon¨u¨um)
x
konstruktor
C
t¨aisarvkonstant
n
lihtrekursiooni identifikaator
f
avaldis
e
t¨u¨ubiavaldis
t
liigiavaldis
k
n¨aidis
p
t¨u¨ubin¨aidis
tp
t¨u¨ubiklassi nimi
c
deklaratsioon
d
andmekonstruktori kirjeldus
dc
valikualternatiiv
ca
t¨u¨ubitaseme valikualternatiiv tca
Selles peat¨ukis vaatleme ainult s¨untaksit, semantikat vaatleme peat¨ukis
7.
3.2.2
Kommentaarid
Fumontrixis on kahte liiki kommentaare. S¨umbol # alustab kommentaari, mis
j¨atkub jooksva rea l˜opuni. Suvalise pikkusega kommentaarid paiknevad /* ja
*/ vahel.
3.2.3
Muutujad ja konstruktorid
Muutujateks on identifikaatorid, mis algavad v¨aiket¨ahe v˜oi alakriipsuga, ning
konstruktoriteks on identifikaatorid, mis algavad suurt¨ahega.
Lisaks saab s¨untaktilise suhkruna kasutada infiksoperaatoreid. Nii nagu
GHC-s, loetakse kooloniga algavad infiksoperaatorid konstruktoriteks ja ¨ule-
j¨a¨anud muutujateks. Kasutada saab ka infiksoperaatorite vasakut ja paremat
l˜oiget, n¨aiteks (1 -) v˜oi (/ 2).
Infiksoperaatorite prioriteedid ja assotsiatiivsus on Fumontrixis sisse ehi-
tatud ja seda programmeerija muuta ei saa. K˜oik infiksoperaatorid peale
aritmeetikatehete + - * / ja % (j¨a¨agi leidmine) on paremassotsiatiivsed ning
¨uhe ja sama madala prioriteediga. Tehted + ja - on vasakassotsiatiivsed ja
keskmise prioriteediga ning tehted * / % on vasakassotsiatiivsed ja k˜orge
prioriteediga.
16
3.2.4
Avaldised
Fumontrixis on olemas j¨argmised avaldisekonstruktsioonid:
muutujaavaldis
x
konstruktoravaldis
C
t¨aisarvkonstant
n
funktsioonirakendamine
e
1
e
2
pol¨umorfse v¨a¨artuse spetsialiseerimine
e $: t
avaldise t¨u¨ubiannotatsioon
e : t
λ-abstraktsioon
\ p : t . e
pol¨umorfne avaldis (parameetriline)
forall C : k . e
pol¨umorfne avaldis (t¨u¨ubiklassiga)
forall c C : k . e
eksistentsiaalseks pakkija (parameetriline) exists C : k . t
eksistentsiaalseks pakkija (t¨u¨ubiklassiga)
exists c C : k . t
valikuavaldis
case e of ca
1
; ...; ca
n
end
let-avaldis
let d
1
; ...; d
n
in e
t¨u¨ubitaseme avaldis
type t
Valikualternatiivid on kujul p -> e. S¨untaktilise suhkruna on lisaks ole-
mas do-avaldised, mida vaatleme l¨ahemalt jaotises 6.5.2.
Liigiannotatsiooni v˜oib liigi * korral ¨ara j¨atta (koos eelneva kooloniga).
3.2.5
N¨
aidised
Fumontrixis on olemas j¨argmised n¨aidisekonstruktsioonid:
muutujan¨aidis
x
konstruktorn¨aidis
C p
1
... p
n
t¨aisarvn¨aidis
n
eksistentsiaalne n¨aidis exists C : k. p
topeltn¨aidis
p
1
@ p
2
ignoreerimisn¨aidis
_
Liigiannotatsiooni v˜oib liigi * korral ¨ara j¨atta (koos eelneva kooloniga).
17
3.2.6
T¨
u¨
ubiavaldised
Fumontrixis on olemas j¨argmised t¨u¨ubiavaldisekonstruktsioonid:
muutujaavaldis
x
konstruktoravaldis
C
t¨aisarvut¨u¨up
Int
funktsioonirakendamine
t
1
t
2
funktsioonit¨u¨up
t
1
-> t
2
universaalne t¨u¨up (parameetriline)
forall C : k . t
universaalne t¨u¨up (t¨u¨ubiklassiga)
forall c C : k . t
eksistentsiaalne t¨u¨up (parameetriline)
exists C : k . t
eksistentsiaalne t¨u¨up (t¨u¨ubiklassiga)
exists c C : k . t
lihtrekursiivne p¨o¨ordumine
rec:f t
mitterekursiivne λ-abstraktsioon
\ x : k . t
lihtrekursiivne λ-abstraktsioon
\ x : k rec:f k. t
valikuavaldis
case t of tca
1
; ...; tca
n
end
t¨u¨ubitaseme v¨a¨artus
value e
avaldise t¨u¨up
typeof e
avaldise t¨u¨up ilma tipmiste monaadideta basetypeof e
T¨u¨ubitaseme valikualternatiivid on kujul tp -> t.
Liigiannotatsiooni v˜oib liigi * korral ¨ara j¨atta (koos eelneva kooloniga).
Lihtrekursiivses λ-abstraktsioonis teise liigiannotatsiooni ees koolonit ei ole,
kuid selle annotatsiooni v˜oib ka ¨ara j¨atta liigi * korral.
Samuti v˜oib rec:f asemel kirjutada lihtsalt rec, kui soovitakse lihtre-
kursioonile nime mitte anda.
3.2.7
T¨
u¨
ubin¨
aidised
Fumontrixis on olemas j¨argmised t¨u¨ubin¨aidisekonstruktsioonid:
muutujan¨aidis
x
konstruktorn¨aidis
C tp
1
... tp
n
funktsioonin¨aidis
(tp
1
-> tp
2
)
t¨aisarvut¨u¨ubin¨aidis Int
ignoreerimisn¨aidis
_
3.2.8
Liigiavaldised
Fumontrixis on olemas j¨argmised liigiavaldisekonstruktsioonid:
t¨u¨up
*
v¨a¨artus
@
funktsiooniliik k
1
-> k
2
18
Erinevalt Haskellist on olemas liik v¨a¨artus, mis v˜oimaldab ka t¨u¨ubitasemel
andmetaseme v¨a¨artustega arvutada.
3.2.9
Deklaratsioonid
Fumontrixis on olemas j¨argmised deklaratsioonikonstruktsioonid:
sidumisdeklaratsioon
p = e
rekursiivne sidumisdeklaratsioon
rec p : t = e
algebralise andmet¨u¨ubi definitsioon
data C C
1
... C
n
= dc
1
| ... | dc
n
t¨u¨ubitaseme sidumisdeklaratsioon
type x = t
klassideklaratsioon
class c t
monaadi sissetoomise deklaratsioon
newmonad C
monaadi eemaldamise deklaratsioon unmonad C
monaadide kaotamise deklaratsioon
nomonads
Andmekonstruktorite kirjeldused on kujul C t
1
... t
n
.
19