11.07.2015 Views

selykielen suunnittelu ja toteutus Samu Viita

selykielen suunnittelu ja toteutus Samu Viita

selykielen suunnittelu ja toteutus Samu Viita

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

45pse([map(tricycle,t(1)),map(price,t(1,1)),map(weigth,t(1,2)),map(frame,t(1,3)),map(saddle,t(1,4)),map(steering,t(1,5)),map(rear,t(1,6)),map(frame_no,t(1,3,1)),map(material,t(1,3,2)),map(weigth,t(1,3,3)),map(pad,t(1,4,1)),map(weigth,t(1,4,2)),map(h,t(1,5,1)),map(weigth,t(1,5,2)),map(front_axle,t(1,5,3)),map(handlebars,t(1,5,4)),map(pedals,t(1,5,5)),map(wheel,t(1,5,6)),map(b,t(1,6,1)),map(weigth,t(1,6,2)),map(rear_axle,t(1,6,3)),map(wheel,t(1,6,4)),map(l,t(1,5,3,1)),map(weigth,t(1,5,3,2)),map(b,t(1,5,4,1)),map(weigth,t(1,5,4,2)),map(diam,t(1,5,5,1)),map(weigth,t(1,5,5,2)),map(diam,t(1,5,6,1)),map(r_type,t(1,5,6,2)),map(weigth,t(1,5,6,3)),map(b,t(1,6,1)),map(weigth,t(1,6,2)),map(diam,t(1,6,3,1)),map(l,t(1,6,3,2)),map(weigth,t(1,6,3,3)),map(wheel,t(1,6,4)),map(diam,t(1,6,4,1)),map(r_type,t(1,6,4,2)),map(weigth,t(1,6,4,3))]).Intensionaalista tasoa esittävän Prolog-termin funktorina on atomi pse. Intensionaalisentason binäärirelaation esitän kuvaustyyppisenä rakenteena. Siinämap-parin ensimmäisenä elementtinä on attribuutin tai olion tyypin nimi <strong>ja</strong> toisenasiihen liittyvä indeksi. Esitän indeksin tuple-konstruktorina. Esimerkkinäon vain tricycle:n intensionaalisen tason esitys. Jos intensionaalisella tasolla olisimallinnettava muitakin osa-kokonaisuussuhteita, niin ne olisivat omina listoinaanpse-termin elementteinä.Aikaisempi tricycle:ä kuvaava Prolog++:lla kuvattu luokka ei ole riittäväekstensionaalisen tason esittämiseen. Luokaa muodostettaessa täytyy kyetäluomaan PSE-formalismin ekstensionaalinen esitystapa. Toisin sanoen oliontäytyy pystyä muodostamaan itsestään PSE-esitystavan mukainen ekstensionaalinenesitys. Prolog-esityksen tulee olla lisäksi sellainen, että sitä voidaanhyödyntää Prolog++:n yhteydessä. Tämä tarkoittaa sitä, että ekstensionaalisentason termiesityksestä tulee pystyä siirtymään muistissa olevaan olioon.Jotta olio pystyy muodostamaan Prolog-esityksen itsestään, täytyy oliotavastaavassa luokassa määritellä metodi, joka koostaa olion osista oikeanlaisenesityksen. Määrittelen metodin siten, että kaikki oliot tulostavat itsestään tuplerakenteen.Termin nimenä on merkkijono, jonka alku muodostuu t-kir<strong>ja</strong>imesta.Tämä vain siksi, että t-kir<strong>ja</strong>in osoittaa kyseessä olevan tuple-konstruktorin. Välittömästit-kir<strong>ja</strong>imen jälkeen merkkijonossa on oliota vastaavan luokan nimi.Tämän jälkeen merkkijonossa on olioidentiteetti. Jos kyseessä on perusolio, oliomuodostaa itsestään tuple-rakenteen, jonka sisältönä ovat olioiden attribuuttienarvot. Jos sen si<strong>ja</strong>an on kyse kompositiosta, tuple-esityksen sisällä on attribuuttienjälkeen alkioina sen komponenttien esitys tuple-rakenteena. Kompositioidenkohdalla rakenne muodostetaan siis rekursiivisesti. Rakenteen rekursiivi-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!