Tunnikava on valminud Euroopa Liidu Euroopa Sotsiaalfondi meetme "Kaasaegse ja uuendusliku õppevara arendamine ja kasutuselevõtt" raames
"Programmeerimine Prologi abil"
Teema tutvustus Antud tunni käigus tutvume programmeerimiskeelega Prolog, õpime kasutama veebipõhist programmeerimiskeskkonda Swish-Prolog, tutvume põgusalt sellega, kuidas Prologis päringuid kirjutatakse ning püüame lahendada Prologi abil ka mõned tekstülesanded.
Tund on mõeldud 3.kooliastme õpilastele, sobib matemaatikatundide lisamaterjaliks., Õppematerjal sisaldab endas tunnikava õpetajale tunni läbiviimiseks, töölehte õpilastele ning linke täiendavale õppematerjalile Prologi ja Swish-Prologi kasutamise kohta. |
Prologi abil on võimalik lahendada ka palju keerulisemaid ülesandeid, kui me selles tunnis õpime. Näiteks võib selle abil lahendada keerulisi loogika või arvutusülesandeid, luua tabeleid, analüüsida suuri andmebaase, joonistada graafikuid ja jooniseid, programmeerida isegi arvutimänge koos graafiliste kujunditega (nt malemäng) jne.
Vajaminevad materjalid ja vahendid
Tunnis läheb meil vaja internetiühendusega arvutit ning veebilehte swish.swi-prolog.org või ilma internetiühenduseta arvutit, kuhu on eelnevalt installitud Prologi arvutipõhine (off-line) versioon.
Tunni etapid
|
|
Programmeerimiskeskkonna Swish-Prolog avamine
- Mine veebilehele swish.swi-prolog.org
- Sule nurgast ettehüppav hüpikaken
- Kontrolli, et nupu "Program" olev nupp "Empty" oleks halli värvi (kui pole, vajuta nupul "Empty")
- Programmi käivitamiseks vajuta sinisele nupule "Program"
- Sinu ees avaneb prologi veebipõhine programmeerimis-keskkond (vt allpool olevat pilti)
Prologi programmeerimiskeskkonna vaade
Kasutaja ees avaneb aken, mis on jagatud vertikaalse joonega kaheks ning neist parempoolne omakorda horisontaalse joonega veel kaheks.
Ekraani vasakul poolel on suur valge aken, kuhu tuleks kirjutada programm (algandmed, seosed programmi erinevate osade vahel jne). Akna parem pool jaguneb kaheks:
|
|
Programmi silumine
Programmi silumiseks nimetatakse programmeerimisel muudatuste tegemist programmi koodis, et see paremini töötaks (nt oleks lühem ja kiirem).
Swi-Prologi juures on eriline see, et Prolog annab kasutajale üsna järjepidevalt märku sellest, kui programmis mingi silmnähtav viga sees tundub olevat. Vea asukoha paremaks ülesleidmiseks annab Swi-Prolog sellest märku nii tekstilise hoiatuse kui ka vigase koodirea värvi muutmisega. Puuduvate või topelt kirjavahemärkide korral ilmub võimalikku "kahtlasesse" kohta ekraanil punasetäpiline alljoon.
Kasutaja peaks arvestama, et viga ei pruugi tegelikult olla alati just sellel real, mis teist värvi läheb, näiteks võib allajoonitud 2 lõppevat sulgu "))" tähendada lihtsalt seda, et kuskil eelpool on programmis on puudu üks algav sulg "(".
Üldjuhul on Prologi poolt toodud "vihjed" päris head abimehed programmi koodis vigade ülesleidmisel.
Swi-Prologi juures on eriline see, et Prolog annab kasutajale üsna järjepidevalt märku sellest, kui programmis mingi silmnähtav viga sees tundub olevat. Vea asukoha paremaks ülesleidmiseks annab Swi-Prolog sellest märku nii tekstilise hoiatuse kui ka vigase koodirea värvi muutmisega. Puuduvate või topelt kirjavahemärkide korral ilmub võimalikku "kahtlasesse" kohta ekraanil punasetäpiline alljoon.
Kasutaja peaks arvestama, et viga ei pruugi tegelikult olla alati just sellel real, mis teist värvi läheb, näiteks võib allajoonitud 2 lõppevat sulgu "))" tähendada lihtsalt seda, et kuskil eelpool on programmis on puudu üks algav sulg "(".
Üldjuhul on Prologi poolt toodud "vihjed" päris head abimehed programmi koodis vigade ülesleidmisel.
Programmi käivitamine
Prologis tehtud programmi käivitamiseks tuleb lihtsalt päringuaknasse kirjutada vastav päring ning vajutada kas "enter" või veebilehe paremal allnurgas rohelist nuppu "run"
Teksti põhjal seoste leidmine
Alustuseks üks hästi lihtne andmestik, mille abil näeme, kuidas Prolog töötab:
Peres on 3 last: Anne, Toomas ja Kristi. Nende ema nimi on Malle, isa nimi Kalle. Vanaema (Malle ema) nimi on Helle.
Milliseid seoseid siit leida võib ning milliseid päringuid kasutada saaks?
Peres on 3 last: Anne, Toomas ja Kristi. Nende ema nimi on Malle, isa nimi Kalle. Vanaema (Malle ema) nimi on Helle.
Milliseid seoseid siit leida võib ning milliseid päringuid kasutada saaks?
- Kõigepealt tuleb üles leida ülesande tekstist kõikvõimalikud andmed - antud ülesande puhul on nendeks inimeste nimed.
- Edasi tuleks leida tekstis sisalduvate faktide omavahelised seosed ning need kirja panna (programmi aknasse). Neile seostele ehk predikaatidele ehk funktsioonidele saab anda täpselt sellised eestikeelsed nimetused nagu kasutaja soovib. Nii nagu matemaatikas tavapärane, võivad seosed ehk funktsioonid olla kahe, kolme või enama muutuja vahel.
Kuna nimedega siin mingeid tehteid (matemaatilisi ega loogikatehteid) ei tehta, siis on need lihtsalt andmed ja tuleks need kirjutada väikeste tähtedega. Kui kirjutaksime nimed suurte tähtedega, loeks programm need muutujateks.
Antud laused tähistavad seoseid ema ja lapse nimede vahel.
Lauset kujul ema(X,Y). nimetatakse predikaadiks (matemaatikatundides kasutame sellise seose kirjeldamiseks ka mõistet funktsioon), kus X tähistab ema nime ja Y lapse nime.
Predikaat peab algama alati väikese tähega. Kui predikaat on ekraanile korrektselt sisestatud (predikaat + sulgudes andmed või muutujad + lõpul punkt) , siis ta värvub see swish-prologis punaseks.
Antud laused tähistavad seoseid ema ja lapse nimede vahel.
Lauset kujul ema(X,Y). nimetatakse predikaadiks (matemaatikatundides kasutame sellise seose kirjeldamiseks ka mõistet funktsioon), kus X tähistab ema nime ja Y lapse nime.
Predikaat peab algama alati väikese tähega. Kui predikaat on ekraanile korrektselt sisestatud (predikaat + sulgudes andmed või muutujad + lõpul punkt) , siis ta värvub see swish-prologis punaseks.
Päringute koostamine
Esitame nüüd nende andmete kohta mõned päringud, sisestades need päringuaknasse ning vajutades seejärel kas „enter“ või rohelisele nupule „run“.
Näiteks kirjutame päringuaknasse (paremal alumine aken) lause: ema(malle,X).
Selles lauses on predikaadis ema() ema nimi etteantud ja lapse nime asemel on X (suur täht = muutuja), selle päringu täitmise käigus peaks arvuti suutma üles leidma kõik need lapsed, kelle ema nimi on Malle.
Näiteks kirjutame päringuaknasse (paremal alumine aken) lause: ema(malle,X).
Selles lauses on predikaadis ema() ema nimi etteantud ja lapse nime asemel on X (suur täht = muutuja), selle päringu täitmise käigus peaks arvuti suutma üles leidma kõik need lapsed, kelle ema nimi on Malle.
Tegelikult saame esimeses järjekorras kätte vaid esimese vastuse - anne:
Kui nüüd vajutada mitu korda järjest nuppu „Next“ lisandub iga vajutusega üks vastuserida juurde:
Kui aga soovime antud andmete põhjal teada saada hoopis ema nime, peaksime kirjutama päringus muutuja X esimesele kohale:
Kui aga kirjutame päringukasti mõne sellise lause, mille kohta programm vastust ei leia, siis tuleb ette punane kiri False.
Andmestikul põhinev näidisülesanne
Prologi hea omadus on see, et tema abil on võimalik väga kiiresti läbi kontrollida suuri andmemassiive. Alljärgnev näidisülesanne ongi selle kohta, kuidas Prologi abil kergesti päringute abil saada kätte andmeanalüüsi tulemusi.
Näidisülesanne
Tiinal on mitu lemmiklooma: kass Miisu, koer Pontu, papagoi Kiki ja rott Ruudi. Tema pinginaaber Piretil on kutsikas Muki ja kass Peedu. Nende sõbral Peetril on aga kass nimega Ants ning koer Reks.
Näidisülesanne
Tiinal on mitu lemmiklooma: kass Miisu, koer Pontu, papagoi Kiki ja rott Ruudi. Tema pinginaaber Piretil on kutsikas Muki ja kass Peedu. Nende sõbral Peetril on aga kass nimega Ants ning koer Reks.
Selles tekstis sisalduvaid andmeid saame kirja panna mitmel erineval moel. Üks võimalus on neid andmeid liikide kaupa üles loetleda kujul loom(nimi) (all vasakul). Teine võimalus aga luua hoopis pikemaid seoseid, näiteks võttes kasutusele predikaadi lemmik, millel on 3 muutujat: omaniku nimi, lemmiku liik ja lemmiku nimi (all keskel).
Sellise andmestiku põhjal saab teha erinevaid päringuid.
Nt all paremal on vastus päringule ?- lemmik(tiina,X,Y). mis annab vastuseks kõik Tiina lemmikloomad koos nimedega.
Sellise andmestiku põhjal saab teha erinevaid päringuid.
Nt all paremal on vastus päringule ?- lemmik(tiina,X,Y). mis annab vastuseks kõik Tiina lemmikloomad koos nimedega.
Kui me aga soovime vaid mingeid konkreetseid andmeid ning osa meid üldse ei huvita, võime endale mittevajalike andmete kuvamisest pääsemiseks kasutada selle muutuja asemel allkriipsu _. Näiteks asendades eelmises päringus lemmiklooma liiki tähistanud X-i allkriipsuga _ . Kasutades päringut ?- lemmik(tiina,_,Y). saame selle vastustena vaid tiina lemmikloomade nimed: |
Ülesanded iseseisvaks lahendamiseks
Alljärgnevalt mõned ülesanded, mida on võimalik Prologiga lahendada. Ülesanded on erineva raskusastmega: esimene lihtsam, viimane kõige keerulisem, vali ise, kas soovid lahendada mitu lihtsamat või hoopis ühe raske ülesande.
Ülesanne 1
Koosta eelpool toodud näidisülesande andmete põhjal päringud, mille abil saad leida:
Koosta eelpool toodud näidisülesande andmete põhjal päringud, mille abil saad leida:
- Pireti lemmikloomad (koos nimedega)
- kõik kassiomanikud
- kõikide koerade nimed
- papagoi omaniku nime
Ülesanne 2
Tekita analoogselt eelmise ülesandega ise pisike andmestik, märkides sellesse oma sõprade, tuttavate või sugulaste automargid ja autode värvid (vähemalt 5 rida). Näiteks: auto(vanaisa, volga, valge). auto(ema,volvo, punane)
Loo päringud, mis leiavad sellest andmestikust
Tekita analoogselt eelmise ülesandega ise pisike andmestik, märkides sellesse oma sõprade, tuttavate või sugulaste automargid ja autode värvid (vähemalt 5 rida). Näiteks: auto(vanaisa, volga, valge). auto(ema,volvo, punane)
Loo päringud, mis leiavad sellest andmestikust
- Kõik üht värvi autod (nt punased),
- Kõik üht marki autod ja nende omanikud
- Kõik erinevad värvid
- Kõik erinevad automargid
Ülesanne 3
Ühe Tallinna kooli gümnaasiumiklassil on sel veerandil neljapäeviti 8 tundi, kokku 6 erinevat õppeainet. Füüsikatund on kohe pärast matemaatikat. Kunstiajaloole eelnevad ja järgnevad humanitaarainete tunnid. Vene keel on 2 tundi peale ajalootundi. 3 reaalainete tundi on kõik järjestikku. Keeletunnid on nii koolipäeva algul kui lõpus. Ajalugu algab 4 tundi peale inglise keelt. Mõlemad topelttunnid on tunniplaanis järjestikku. Millises järjekorras neljapäeviti need tunnid on?
Ühe Tallinna kooli gümnaasiumiklassil on sel veerandil neljapäeviti 8 tundi, kokku 6 erinevat õppeainet. Füüsikatund on kohe pärast matemaatikat. Kunstiajaloole eelnevad ja järgnevad humanitaarainete tunnid. Vene keel on 2 tundi peale ajalootundi. 3 reaalainete tundi on kõik järjestikku. Keeletunnid on nii koolipäeva algul kui lõpus. Ajalugu algab 4 tundi peale inglise keelt. Mõlemad topelttunnid on tunniplaanis järjestikku. Millises järjekorras neljapäeviti need tunnid on?
Ülesanne 4
Elasid kord 3 sõpra, nende nimed olid Ants, Jüri ja Mati. Ants elas punases majas. Jüri armastas mängida korvpalli. Sinises majas elaval sõbral oli kana. Koeraomanik käis jalpallitrennis. Rohelises majas peeti kanaarilinde. Kes neist sõpradest tennist mängib?
Vihje: koosta andmestik ning kasuta sobilikku päringut.
Elasid kord 3 sõpra, nende nimed olid Ants, Jüri ja Mati. Ants elas punases majas. Jüri armastas mängida korvpalli. Sinises majas elaval sõbral oli kana. Koeraomanik käis jalpallitrennis. Rohelises majas peeti kanaarilinde. Kes neist sõpradest tennist mängib?
Vihje: koosta andmestik ning kasuta sobilikku päringut.
Lisa ülesanne (kodune ülesanne)
Mõtle kodus välja ise mingi analoogiline ülesanne ning püüa see Prologi abil ära lahendada.