U L i k o o L matemaatika-informaatikateaduskond



Yüklə 0,53 Mb.

səhifə5/23
tarix13.11.2017
ölçüsü0,53 Mb.
1   2   3   4   5   6   7   8   9   ...   23

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


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



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


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






Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2019
rəhbərliyinə müraciət

    Ana səhifə