U L i k o o L matemaatika-informaatikateaduskond



Yüklə 0,53 Mb.

səhifə20/23
tarix13.11.2017
ölçüsü0,53 Mb.
1   ...   15   16   17   18   19   20   21   22   23

Muutujate jaoks on kontekstis kujutus zVar, mis seab muutuja nimele

vastavusse selle t¨u¨ubi, ning keskkonnas kujutus eVar, mis seab muutuja ni-

mele vastavusse selle v¨a¨artuse.

T¨u¨ubikonstruktorite jaoks on kontekstis kujutus zCon, mis seab konst-

ruktori nimele vastavusse selle t¨u¨ubi avaldisena kasutamisel (v¨ali zConExpr

kujutuse tulemuseks olevas kirjes), selle semantika n¨aidisena kasutamisel (v¨ali

zConPatt) ning selle aarsuse (zConArity). Konstruktori kasutamisel avaldi-

sena l¨aheb ainult esimest komponenti vaja, ¨ulej¨a¨anud on vajalikud konstruk-

torn¨aidise semantika jaoks. Keskkonnas on kujutus eCon, mis seab konstruk-

tori nimele vastavusse selle v¨a¨artuse avaldisena kasutamisel (eConExpr) ning

selle semantika n¨aidisena kasutamisel (eConPatt).

exists-avaldise exists C : k . t[C] andmetaseme semantikaks on nn

pakkimisfunktsioon:

Exists _pi _astr _ke _ua ->

VForall $ \ vpi -> VFun $ \ va -> VExists vpi va

See on pol¨umorfne funktsioon, mis v˜otab argumendiks monomorfset t¨u¨upi

t[C] v¨a¨artuse va ning pakib selle koos t¨u¨ubiparameetrile C vastava t¨u¨ubiklassi

c eksemplariga (v˜oi ¨uhikt¨u¨ubi v¨a¨artusega parameetrilise pol¨umorfismi korral)

vpi eksistentsiaalseks v¨a¨artuseks VExists vpi va.

forall-avaldise t¨u¨ubitaseme semantikas

Forall pi astr ke ea -> do

let KIType cid kie = ki

zpi <- polymorphismInfoZem pi ctx

let k = kindExprKem ke

let (aid, ctx’) = addTypeVar astr k ctx

ctx2 <- addInstance zpi aid cid $ ctx’

(te,ssie) <- exprZem ea kie ctx2

return (makeTForall zpi aid k te, SSIForall cid ssie)

luuakse funktsiooniga addTypeVar uus t¨u¨ubikonstruktor, millele eraldatak-

se uus unikaalne identifikaator aid, mida veel kontekstis kasutusel ei ole.

Funktsiooniga addInstance muudetakse see uus t¨u¨up (konstruktor) t¨u¨ubi-

klassi esindajaks (kui kvantifitseeritud muutuja oli seotud t¨u¨ubiklassiga). Ek-

semplari v¨a¨artus lisatakse keskkonda andmetaseme semantikas funktsiooniga

addVInstance. L¨ahemalt vaatleme seda jaotises 7.6.4.

Funktsiooni rakendamise semantikat vaatleme l¨ahemalt jaotises 7.5. type-

avaldise semantikat vaatleme jaotises 7.6.2.

64



7.4.2



ubiavaldised

Enamiku t¨u¨ubiavaldisekonstruktsioonide semantika on samuti ¨usna lihtne,

v.a t¨u¨ubitaseme programmeerimisega seotud konstruktsioonid, mille seman-

tikat vaatleme jaotises 7.6. T¨u¨ubiavaldise semantika m¨a¨arab selle t¨u¨ubitase-

me objekti, mida see avaldis kujutab.

T¨u¨ubimuutujate (s¨unon¨u¨umide) ja t¨u¨ubikonstruktorite liigitaseme seman-

tika jaoks on kontekstis kujutus zTVarKind, mis seab t¨u¨ubimuutuja v˜oi -konst-

ruktori nimele vastavusse selle liigi. See on ka ainus osa kontekstist, mida

liigitaseme semantika andmisel kasutatakse.

T¨u¨ubimuutujate t¨u¨ubitaseme semantika jaoks on kontekstis kujutus zTVar,

mis seab muutuja nimele vastavusse t¨u¨ubitaseme objekti (t¨u¨ubi, t¨u¨ubikonst-

ruktori, t¨u¨ubitaseme funktsiooni v˜oi t¨u¨ubitaseme v¨a¨artuse).

T¨u¨ubikonstruktorite t¨u¨ubitaseme semantika jaoks on kontekstis kujutus

zTCon, mis seab konstruktori nimele vastavusse t¨u¨ubitaseme objekti (antud

juhul t¨u¨ubikonstruktori).

7.4.3


aidised


N¨aidise semantika m¨a¨arab, kuidas v¨a¨artuses sisalduvat infot antud n¨aidise

poolt keskkonda (ja selle staatilist infot keskkonda) salvestatakse, s.t n¨aidise

semantika seab v¨a¨artusele ja selle t¨u¨ubile vastavusse vastavalt keskkonna- ja

kontekstiteisenduse. D¨unaamilist semantikat m¨a¨arava funktsiooni t¨u¨up on

pattSem :: Patt -> Value -> StatSemInfo -> Environment

-> Maybe Environment

Siin kasutatakse Maybe-t¨u¨upi, kuna n¨aidisesobitamine v˜oib (m˜ones keskkon-

nas) eba˜onnestuda ning sellisel juhul on tulemuseks Nothing.

Muutujan¨aidise korral lihtsalt seotakse v¨a¨artus vastava muutujanimega.

Konstruktorn¨aidise korral kontrollitakse, et v¨a¨artus oleks moodustatud ˜oi-

ge konstruktoriga ning rakendatakse konstruktori argumentv¨a¨artustele alam-

n¨aidiste semantikat, mille ¨uhendamiseks kasutatakse Maybe-monaadis foldM-

funktsiooni, seega kui m˜one alamn¨aidise sobitamine eba˜onnestus, siis on kogu

tulemuseks Nothing.

exists-n¨aidise korral tuuakse sisse uus t¨u¨ubikonstruktor, mis vajadusel

muudetakse t¨u¨ubiklassi esindajaks (kasutades eksistentsiaalse v¨a¨artuse sisse

pakitud eksemplari), sarnaselt forall-avaldise semantikaga. Eksistentsiaalse

v¨a¨artuse sees olevale tavalisele v¨a¨artusele rakendatakse alamn¨aidist.

¨

Ulej¨a¨anud andmetaseme n¨aidisekonstruktsioonid on lihtsa semantikaga.



Analoogiliselt andmetaseme n¨aidistega m¨a¨arab t¨u¨ubin¨aidise semantika,

kuidas t¨u¨ubitaseme objektis sisalduvat infot konteksti salvestada. Eraldi t¨u¨u-

65



bin¨aidisekonstruktsioonid on olemas ainult t¨u¨ubikonstruktorite, funktsiooni-

t¨u¨upide ja t¨aisarvut¨u¨ubi jaoks, tipmiste kvantoritega t¨u¨ubid sobituvad ainult

muutujan¨aidise ja ignoreerimisn¨aidisega. T¨u¨ubitaseme funktsioone ja v¨a¨ar-

tusi ei saa ¨uldse t¨u¨ubin¨aidistega kasutada. T¨u¨ubin¨aidiseid saab kasutada ai-

nult t¨u¨ubitaseme case-konstruktsioonis, mitte t¨u¨ubitaseme λ-abstraktsioonis

ega let-avaldises.

7.4.4

Algebralised andmet¨



ubid


Algebraliste andmet¨u¨upide semantika antakse kahes osas. Funktsioonidega

dataConKem, dataConZem, dataConSem antakse andmekonstruktorite (algeb-

ralise andmet¨u¨ubi variantide) semantika. Funktsioonidega dataTypeKem,

dataTypeZem, dataTypeSem antakse t¨u¨ubikonstruktori semantika.

Algebralise andmet¨u¨ubi t¨u¨ubikonstruktori staatiline semantika lisab sel-

le uue t¨u¨ubikonstruktori konteksti. Lisaks defineeritakse kolm funktsiooni:

constr, mis on selle konstruktori semantika t¨u¨ubiavaldises kasutamisel; destr,

mis kontrollib, et t¨u¨up oleks konstrueeritud just vaadeldava konstruktoriga

ja tagastab selle konstruktori argumendid; addVarsToContext, mis lisab al-

gebralise andmet¨u¨ubi definitsioonis m¨a¨aratud t¨u¨ubikonstruktori parameetrid

uute konstruktoritena konteksti.

Neid kolme funktsiooni kasutatakse selle algebralise andmet¨u¨ubi and-

mekonstruktorite staatilise semantika defineerimisel. Iga andmekonstrukto-

ri semantikas lisatakse addVarsToContext abil t¨u¨ubiparameetrid konteksti

ning leitakse andmekonstruktori argumendiks antud t¨u¨ubiavaldisele vasta-

vad t¨u¨ubid antud kontekstis. Need v˜oivad sisaldada t¨u¨ubiparameetreid. Et

leida konstruktori t¨u¨upi avaldises kasutamisel (constrType), moodustatak-

se nende argumendit¨u¨upide ja oodatava tulemust¨u¨ubi p˜ohjal curried-kujul

funktsioonit¨u¨up ning seotakse (k˜oik algebralise andmet¨u¨ubi deklaratsioonis

esinenud) ¨uldisuskvantoritega. Samuti leitakse konstruktori n¨aidisena kasu-

tamise semantika (destr) ja aarsus (arity).

Andmekonstruktori d¨unaamilises semantikas m¨a¨aratakse analoogilise aval-

disena ja n¨aidisena kasutamise semantikad (vastavalt sv ja sp).

7.4.5


Deklaratsioonid

Deklaratsiooni semantikaks on konteksti- ja keskkonnateisendus.

Mitterekursiivse let-deklaratsiooni semantika moodustatakse standard-

selt n¨aidise ja avaldise semantika p˜ohjal, lisades avaldise poolt m¨a¨aratud

v¨a¨artuse (v˜oi selle osad) n¨aidise abil keskkonda ning selle v¨a¨artuse t¨u¨ubi

kohta k¨aiva info (eksistentsiaalsete n¨aidiste korral) konteksti.

66





Dostları ilə paylaş:
1   ...   15   16   17   18   19   20   21   22   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ə