Visual Prolog

Ohjelmistotekniikan seminaari / Kimmo Wideroos

Sisällysluettelo


Tiivistelmä

Alussa esitellään erilaisia ohjelmointiparadigmoja ja motivoidaan deklaratiiviseen ohjelmointiparadigmaan. Prolog-kieltä esitellään lyhyesti, lähinnä pienten esimerkkien avulla. Tarkoituksena on perehdyttää lukijaa Prolog-kieleen vain sen verran, että ymmärretään Prologin edut sovelluskehityksessä.

Varsinainen aihe on Visual Prolog. Visual Prologista kerrotaan sovelluskehitysvälineenä yleisesti ja käydään läpi sen integroitu ohjelmointiympäristö. Keskeistä luvussa on yksinkertaisen esimerkkiohjelman laatimisen esittely.

1. Johdanto

Prolog kehitettiin 1970-luvun alussa Marseillen yliopistossa. Sen jälkeen Prologista on tehty monia versioita ja siitä on tullut itseoikeutetusti yksi tekoälytutkimuksen peruskielistä.

Valitettavasti Prolog suunniteltiin alunperin tulkkipohjaiseksi kieleksi. Prolog-tulkeissa kiteytyy tulkkien kiroukset eli hitaus ja resurssien tehoton käyttö. Tätä kuvaa hyvin toteamus "Traditional Prolog is a memory hog and to produce real-life applications, one should have fairly unreal (read: expensive, large) computers."

Program Development Center (PDC) oli vielä 80-luvun lopulla osa Borlandin ohjelmistotaloa. Tällöin Borlandilla oli markkinoilla Turbo Prolog -niminen kääntäjä. Ensimmäinen PDC:n emoyhtiöstä irtautumisensa jälkeen lanseeraama kääntäjä oli mielikuvituksellisesti PDC-Prolog. Se oli PC-ympäristöön tarkoitettu Prolog kääntäjä. Tällä hetkellä PDC:n päätuote on Visual Prolog.

Visual Prolog on aito Prolog-kääntäjä, jonka koodia voi verrata minkä tahansa C++-kääntäjän tuottamaan koodiin. Standardiin Prologiin nähden Visual Prolog -kääntäjässä on jouduttu tekemään joitakin kompromisseja. Esimerkiksi Standardi Prolog voi käyttää dataa koodina. Visual Prologilla voidaan kuitenkin emuloida myös standardi-Prologia kääntämällä Prolog-tulkki Visual Prologille.
Visual Prologiin on sisällytetty interaktiivinen sovelluskehitysympäristö VDE (Visual Development Environment). Sen avulla on helppo laatia graafisia ohjelmia, jotka on lisäksi mahdollista siirtää eri ympäristöihin, kuten esimerkiksi MS-DOS, Windows ja OS/2 käyttöjärjestelmille.

2. Proceduraalinen vs. deklaratiivinen ohjelmointiparadigma

Ohjelmointikielet voidaan jakaa proseduraalisiin ja deklaratiivisiin kieliin niiden tukeman ohjelmointiparadigman mukaisesti. "Ohjelmointiparadigma tarkoittaa tapaa ja mallia ohjelmoida. Se on filosofia ja käytäntö mieltää, jäsentää ja esittää ohjelmointiongelma tietyn dogman mukaan" [Hei].

Proseduraalisella kielellä kirjoitetun ohjelman toiminta määräytyy sarjasta peräkkäin suoritettavia operaatioita. Ohjelmoijan on itse jaettava käsiteltävä ongelma palasiin, jotka voidaan ratkaista proseduraalisesti. C/C++ -kieltä käytetään jatkossa esimerkkinä tyypillisestä proseduraalisesta kielestä.

Proseduraalisessa ohjelmassa voidaan erottaa syöttö-, käsittely- ja tulostustoiminnot, jotka sisältävät paljon if- ja for- lauseita. Erilaiset silmukat voidaan aina ajatella sofistikoidummaksi muodoksi goto-käskystä. Silmukkojen runsaus tekee ohjelmasta vaikean testata ja ylläpitää.

Prolog on ilmeinen edistysaskel proseduraalisista kielistä kohti deklaratiivisuutta. Prolog-ohjelma koostuu säännöistä ja määrittelyistä, joiden puitteissa Prologin päättelykone hakee ratkaisuja. On tärkeää huomata, että se miten ratkaisuun loppujen lopuksi päästään on sisäisen päättelykoneen huoli.

Prologissa toiminta perustuu sisäiseen päättelykoneeseen. Muita läheisesti Prologiin liittyviä käsitteitä ovat mm. epädeterministisyys (moniarvoiset predikaatit), samastus, peräytys- eli hakutoiminto ja rekursio. Näistä lisää seuraavassa luvussa.

Esimerkki 2.1. Prologilla voidaan ohjelmoida myös käyttäen proseduraalista tapaa. Seuraavassa esimerkki for -silmukasta Prologilla:

3. Prolog pähkinänkuoressa

Prolog on syntaksiltaan suhteellisen yksinkertainen kieli. Varattuja sanoja tai standardipredikaatteja on vain kourallinen.

Tähän suppeaan esittelyyn ei ole nähty tarpeelliseksi mahduttaa luetteloa Prologin vakiopredikaateista. Esimerkkiohjelmat on tehty Visual Prologin notaatiolla.

3.1 Klausuulien merkintätavoista

Prolog-tulkkien ja kääntäjien syntakseissa on kirjavuutta. Seuraavassa muutamia klausuulien merkintätapoja:

Visual Prolog noudattaa Turbo Prolog notaatiota.

3.2 Ohjelmalohkot Visual Prologissa

Visual Prologilla kirjoitettu ohjelma koostuu seuraavista lohkoista:

Muita lohkotyyppejä ovat:

3.3 Päättelykone

Prolog-ohjelman toiminta tapahtuu päättelykoneen (inference machine) ohjaamana. Päättelykone etsii sisäisestä tietokannasta ratkaisua ohjelman tavoitteelle (goal) syvyyshaulla. Kun tulee vastaan tilanne, ettei ratkaisua löydy, peruutetaan hakupuussa taaksepäin (backtracking) ja aloitetaan ratkaisun haku uudesta hakupuun haarasta.

Sisäinen tietokanta on siis maailma, jossa päättelykone toimii. Sisäinen tietokanta muodostuu tosiasioista (faktat) ja säännöistä (predikaatit).

Predikaatti on ohjelman peruskomponentti, joka sisältää kyselyitä. Kun predikaatti on "ratkaistu", muuttuu se faktaksi. Samalla Predikaatilla voi olla useita rinnakkaisia ja vaihtoehtoisia määritelmiä l. lausekkeita. Faktat ovat Prologin tietokannan komponentteja.

Esimerkki 3.1. Faktoja ja predikaatteja:

Esimerkin 3.1. kysely palauttaisi vastaukseksi `Eemil', kuten arvata saattaa.

Anonyymimuuttuja `_' on Prologin erikoisuus. Se on erikoismuuttuja, jolla ilmaistaan, että kohdassa olevan muuttujan arvolla ei ole merkitystä.

Samastus on tapa, jolla päättelykone vertaa ohjelman eri komponentteja toisiinsa. Se tarkoittaa itse asiassa muuttujien ja tietorakenteiden tarkistamista seuraavasti:

Esimerkki 3.2. Erilaisten ohjelmalohkojen ja anonyymimuuttujan käytön havainnollistaminen:
Esimerkin 3.2. kysely palauttaisi kaikki tietokantaan tallennetut laudatur-tasoiset kurssit.

3.4 Prologin tietorakenteet

Prologin tietorakenteet ovat joko termejä tai listoja. Termi voi sisältää toisia sisäkkäisiä termejä: Listanotaationa käytetään hakasulkuja Tolppamerkillä `|' voidaan erottaa listasta ensimmäinen termi ja listan häntä:

3.5 Prologin ohjausrakenteet

Rekursio on Prologin keskeinen ohjausrakenne. Rekursio on luonnollinen tapa kuvata mitä tahansa ongelmaa, joka koostuu toisesta analogisesta ongelmasta. Esimerkki 3.3. Kertoman laskeminen rekursiota apuna käyttäen: Rekursiota käyttäen voidaan esittää algoritmeja, joita ei muuten voitaisi kivuttomasti esittää. Listojen käsittelyssä rekursio on usein lyömätön.

Prolog-ohjelmat ovat epädeterministisiä. Epädeterministisyydellä tarkoitetaan tässä moniarvoisuutta eli Prolog-ohjelma voi palauttaa useitakin vastauksia. Tämä johtuu siitä, että samalla predikaatilla voi olla useita rinnakkaisia määrittelyjä.

Joskus on tarve saada Prolog-ohjelmaan deterministisyyttä. Näin esimerkiksi silloin, kun tarvitaan vain yksi ratkaisu tai kun halutaan tehostaa ohjelman toimintaa.

Katkaisutermillä `!' voidaan ohjelmaan lisätä deterministisyyttä. Katkaisutermi estää muiden ratkaisujen haun. Se nopeuttaa ohjelman suoritusta kahdella tavalla. Ensinnäkin säästytään turhien tai olemattomien ratkaisujen etsimiseltä. Toisaalta katkaisutermin käyttö säästää pinoa, koska deterministisen predikaatin ei tarvitse tallentaa peräytymisreittiään.

Visual Prologissa on mahdollista asettaa epädeterministisyyden varoitus päälle "Compiler Options" -dialogissa. Usein epädeterministisyydestä on haittaa ja se hidastaa sovelluksen toimintaa, mutta joskus se on oleellinen osa sovelluksen toimintaa.

Esimerkki 3.4. Epädeterministinen Prolog-ohjelma palauttaa 2. asteen yhtälön kaikki reaalijuuret.

Esimerkin 3.3. ohjelma kysyy käyttäjältä 2. asteen yhtälön Ax^2 + Bx + C = 0 vakiotermit A, B, ja C ja palauttaa yhtälön ratkaisut. Ohjelman idea on siinä, että predikaatilla toisen_asteen_yhtälö on kaksi rinnakkaista määrittelyä, yksi molemmille reaalijuurille. Prolog-tulkki kaivaa ratkaisut molempien predikaattimäärittelyjen alta, koska sitä ei ole katkaisumerkeillä estetty.

4. Sovelluskehitys Prologilla

Prolog-kielellä on monia huomattavia etuja muihin ohjelmointikieliin nähden. Toisaalta varjopuoletkin - hitaus ja tehottomuus - ovat vuosien kuluessa, tulkkien, kääntäjien ja tietokoneiden kehittyessä, kutistuneet. Prologin voi mielestäni laskea reaaliseksi ohjelmointikielivaihtoehdoksi melkeinpä sovellukseen kuin sovellukseen.

Prologissa on sisäänrakennettu menetelmä tietokantojen ja tietorakenteiden käsittelyyn. Sen sisäänrakennetun ohjausmekanismin (samastus ja peräytys) ansioista sovelluksesta voidaan karsia tuottavuutta ja ylläpidettävyyttä heikentäviä silmukoita.

Prolog tukee ns. sipuliprotoilua, eli toisin sanoen ohjelman kehittäminen voidaan aloittaa keskeisistä osista ja edetä kerros kerrokselta. Prolog on korkean tason ohjelmointikieli, joten määrittely- ja suunnitteluvaihe ennen varsinaista toteutusta jää melko lyhyeksi. Edellä mainituista seikoista johtuen ohjelman testaus voidaan aloittaa hyvin aikaisessa vaiheessa.

4.1 Prolog-ohjelman kehittäminen

Erilaisia näkökulmia sovelluksen kehittämiseen ovat hyötypainotteinen, semanttinen ja rakenteellinen. Hyötynäkökohta on käytännöllinen lähestymistapa tarkastellen mitä erilaisia etuja ja hyötyä sovelluksesta voi olla ja miten ne voidaan saavuttaa. Semanttinen tarkastelu keskittyy tulo- ja lähtötietoihin sekä käyttöliittymään ja niiden suhteisiin. Rakenteellinen näkökulma painottuu sovelluksen jakamiseen järkeviin kokonaisuuksiin ja komponentteihin.

Perinteinen vaihejako Prolog-sovelluksen kehittämiseen on seuraava:

4.2 Prolog-ohjelman testaaminen

Koska Prolog-ohjelma on deklaratiivista koodia (ts. tehtävänkuvausta), on koodi lähempänä luonnollisella kielellä tehtyä ongelmankuvausta kuin esim. C. Niinpä määrittelyn siirtäminen Prolog-ohjelmaksi tuottaa pääsääntöisesti vähemmän virheitä kuin C-ohjelmaksi. Edelleen, Prolog-ohjelman fyysinen rivimäärä on usein vain 10 % vastaavasta proseduraalisella kielellä kirjoitetusta ohjelmasta, joten ohjelman testaaminen helpottuu huomattavasti.

Ohjelman polkujen testaus (whitebox-testaus) sujuu Prologin tulkin avulla. Tosin myös monessa kehittyneessä proseduraalisessa kielessä on varsin kehittyneet debuggausmahdollisuudet.

Prologin deklaratiivinen koodi on "itsedokumentoivaa", helppolukuista sekä modulaarista, koska sovellus rakentuu pelkästään faktoista ja säännöistä ja niistä muodostetuista lausekkeista. Koodista pääsee yleensä suhteellisen nopeasti perille, kun on oppinut Prologin tavoille. Ohjelmointiparadigman erilaisuus totuttuun proseduraaliseen verrattuna on kylläkin kynnys, joka saattaa joskus hankaloittaa koodin lukua.

Myytti Prologin ylimaallisesta hitaudesta ei pitäne paikkaansa ainakaan Visual Prologin tapauksessa. Kuvassa 4.1. on tulokset eräästä QuickSort -lajittelutestistä. Visual Prolog jäi tosin viimeiseksi, mutta erot Pascaliin ja C++:aan eivät ole järisyttäviä . Yllättäen (?) C++ ei ollutkaan nopein vaan Pascal. C++:n hyytyminen johtunee luokkarakenteen käsittelyn hitaudesta.

Kuva 4.1. QuickSort-algoritmi Visual Prologille

5. Visual Prolog

Visual Prolog on Prolog-kääntäjä, integroitu ohjelmointiympäristö ja graafinen kehitinympäristö editoreineen ja selaimineen.

Tällä hetkellä Visual Prolog on saatavissa MS-DOS -käyttöjärjestelmälle, PharLab-Extended DOS, Windows 3.1, Win 3.11, Win 95 ja Win NT sekä OS/2 käyttöjärjestelmille.

5.1 Kääntäjä

Visual Prolog sisältää kääntäjän, jolla voi tehdä ajettavia .EXE tiedostoja tai vaihtoehtoisesti dynaamisia DLL-kirjastoja.

5.2 Integroitu ohjelmointiympäristö

Integroitu ohjelmointiympäristö VDE (Visual Development Environment) koostuu useista osista. Siihen kuuluu teksti- ja grafiikkaeditoreita, koodigeneraattoreita (Code Experts) ja käyttöliittymärajapinta VPI (Visual Programming Interface).

VDE:n sisältämän käyttöliittymärajapinta-abstraktion VPI:n avulla on helppo laatia eri ympäristöihin siirrettäviä graafisia ohjelmia. Erilaiset koodigeneraattorit ja resurssieditorit mahdollistavat nopean protoilun nimenomaan käyttöliittymän suunnittelussa. VPI tarjoaa ohjelmoijan käyttöön keskeiset API-predikaatit Prolog-sovelluksen käyttöliittymän tekemiseen.

Sovellushallitsin (Application Expert)

Sovellushallitsin (Application Expert) on projektinhallintatyökalu, jonka avulla uusi Visual Prolog -projekti luodaan ja jolla projektia ylläpidetään. Sovellushallitsimelle kerrotaan mm. mihin ympäristöön sovellus luodaan, millaisia sovellustoimintoja halutaan mukaan ja sovelluksen tunnistetiedot, jotka Visual Prolog sijoittaa luomiesa tiedostojen alkuun. Sovellushallitsimesta lisää luvussa 5.1.

5.3 Resurssieditorit

Resursseilla tarkoitetaan Visual Prologista puhuttaessa dialogeja, valikkoja, työkaluriviä, kursoreita, bittikarttoja, ikoneita ja merkkijonotaulukoita, jotka on luotu VDE:n resurssieditoreilla. Luodut resurssit ovat .VPR -tyyppisessä projektitiedostossa. Kun projekti käännetään, muodostetaan resurssimäärittelyistä standardi resurssitiedosto .RES.

Dialogieditorilla dialogien luominen käy kätevästi. Mahdollisia kontrolleja on käytettävissä seuraavat (katso kuva 5.1): PUSH BUTTON, CHECK BOX, RADIO BUTTON, SCROLL BAR, STATIC TEXT, EDIT, CONTROL, LIST BOX, LIST BUTTON, LIST EDIT, GROUP BOX ja ICON. Myös omia CUSTOM -kontrolleja (esim. Prologilla luotu ikkunaluokka) on mahdollista lisätä.

Kuva 5.1: Dialogin kaikki resurssit.

Ikkunaeditorilla tehdyt ikkunat on suoraan siirrettävissä Prolog ohjelmaan ilman ohjelmointia.

Menueditorilla voidaan laatia päämenu ja alamenuja. Editorilla tehtyjä menuja voi testata kääntämättä sovellusta.

Työkalurivieditorilla laadituilla kontrolliriveillä voi olla normaalien kontollien (PUSH BUTTON, CHECK BOX, LIST BUTTON) lisäksi tekstikenttiä ja erottimia. Kontrolleihin on mahdollista liittää myös help-teksti, joka tulee näkyviin kursorin ollessa ko. kontrollin yllä.

Merkkijonoeditorilla luodut merkkijonotaulukot tallennetaan resurssitiedostoon. Resurssitiedostoon tallennettavia merkkijonoja ovat esimerkiksi sovelluksen antamat kehotukset ja virheilmoitukset.

Grafiikkaeditori on tarkoitettu pienien bittikarttojen (max. 64x64 pikseliä) luomiseen. Tällä Visual Prologin mukana tulevalla bittikarttaeditori voi tehdä lähinnä ikoneja, kursoreita tai muita bittikarttoja . Jos yrittää tehdä isoja bittikarttoja, niin Visual Prolog käynnistää automaattisesti MS Paintbrushin. Hypertekstikehitin (Help Maker ) on Visual Prologin oma editori avustusten tekemiseen. Se sisältää monipuoliset työkalut avustusten suunnitteluun, tekemiseen, kääntämiseen ja testaamiseen. Kääntäessään avustustiedostoja Windowsissa Help Maker käyttää MS Help Compileria.

5.4 Koodigeneraattori

Koodigeneraattori luo eri Windows-resursseja vastaavan koodin. Luotua koodia voi editoida jälkeenpäin, ellei oletuskoodi vastaa tarkoitusta.

6. Sovelluksen rakentaminen Visual Prologilla

Neljännessä luvussa tarkasteltiin sovelluksen rakentamista Prologilla yleensä. Viidennessä luvussa kerrottiin Visual Prologista hyvin yleisellä tasolla.

Seuraavassa keskitytään erityisesti Visual Prologin integroituun ohjelmointiympäristöön (Visual Development Environment, VDE) ja tarkastellaan lyhyesti myös siirrettävää käyttöliittymärajapintaa (Visual Programming Interface). Sovelluksen rakentamisessa esimerkinomaisena sovelluksena käytetään yksinkertaista digitaalikelloa, joka koostuu dialogista, painonapista, tsekkausruudusta ja tekstikentästä.

6.1 VDE (Visual Development Environment)

Sovellushallitsin (Application Expert) on keskeisenä uuden projektin luonnissa (kuva 5.2). Sovellushallitsimen ansiosta projektin luontikynnys on Visual Projektissa matala.

Kuva 5.2. Sovellushallitsimen dialogi.

Sovellushallitsin tekee

Sovellushallitsin tekee siis monta asiaa, joiden tekemiseen muuten menisi aikaa, ja nopeuttaa projektia alussa huomattavasti.

Sovelluhallitsimen dialogissa (kuva 5.2) voidaan määritellä sovelluksen ajoympäristö (Windows/NT, OS/2 tai DOS) ja se, tehdäänkö ajettava sovellus vai DLL-kirjasto. Käyttöliittymätyypiksi voidaan valita jokin seuraavista:

Sovellushallitsimen VPI-optiot (Application Expert - Options) on dialogi, jossa on mahdollista muuttaa VPI:n (Visual Programming Interface) oletusasetuksia:

Kuva 5.3. VPI-optiodialogi.

Projekti-ikkunaan voidaan valita näkyviin halutun tyyppiset resurssit. Kuvan 5.4 ikkunassa ovat näkyvissä `KELLO' -projektiin kuuluvat Prolog-tiedostot.

Kuva 5.4. Projektidialogi

Kun Projekti-ikkunassa (kuva 5.4) valitaan uusi ikkuna painikkeilla `Window-New', avautuu dialogi- ja ikkuna-asiantuntija (Dialog and Window Expert) (kuva 5.5).

Dialogi- ja ikkuna-asiantuntija osaa luoda oletuskoodin halutulle tapahtumalle. Tapahtumankäsittelijän (Event Handling) vasemmanpuoleinen valikko sisältää tapahtumatyypit ja oikeanpuoleinen mahdolliset tapahtumat (kuva 5.5).

Jos halutaan esimerkiksi generoida koodi ikkunan luonnille, valitaan `e_Create' ja `Add Clause' (ks. kuva 5.6).

Kuva 5.5. Dialog- ja ikkuna-asiantuntija.

Kuva 5.6. Koodiekspertin tuottama oletuspredikaatti ikkunan luonnille (lisätty omaa koodia).

Resurssien lisääminen ikkunaan tapahtuu valitsemalla Dialogi- ja ikkuna-asiantuntijassa `Layout'. Kuva 5.7 näkyy erilaiset kontrollit ja sommittelut, joita voi käyttää.

Kuva 5.7: Ikkunan sommittelua.

6.2 Visual Prologin Käyttöliittymärajapinta - VPI

VPI (Visual Programming Interface) on Visual Prologin siirrettävän käyttöliittymän nimi. VPI:n tarkoituksena ei ole ainoastaan tukea siirrettävyyttä vaan toimia myös abstraktiona konventionaalisille API-käskyviidakoille.

Tosin kyllä VPI:ssäkin komentoja löytyy n. 300, mutta koodigeneraattoreiden oletuskoodit auttavat paljon. Käyttäjä voi myös hakea Insert-komennolla minkä tahansa komennon määrittelymuodon ohjelmakoodiin. Usein haetun komennon muuttujaparametritkin ovat jo valmiiksi lähes oikein, joten koodin suoltaminen käy jopa aloittelijalta melko kivuttomasti.

7. Loppusanat

Ohjelmistojen koko kasvaa koko ajan. Vuonna 2000 yleinen sovelluksen koko tulee olemaan noin miljoona riviä koodia[1]. Ettei sovellusten teko, ylläpito ja päivittäminen kävisi ylitsepääsemättömän hankalaksi ja kalliiksi, on tuottavuuteen etsittävä paranuksia.

Eräs ratkaisu ovat erilaiset sovelluskehittimet . Esim. jo taulukkolaskenta-, tietokanta- ja tekstinkäsittelyohjelmien makrokielillä on mahdollista tehdä vaativiakin sovelluksia varsinkin, kun eri sovelluskehittimien ominaisuuksia on mahdollista yhdistää esimerkiksi Windowsissa DDE-linkeillä. Joustamattomuus muodostuu kuitenkin aina jossakin vaiheessa sovelluskehittimien ongelmaksi. Sovellusalueen monimutkaistuessa perinteisten kehittimien resurssit loppuvat nopeasti.

Silloin kun sovelluskehitin ei enää riitä, on palattava takaisin yleisohjelmointikieliin. Edullisinta on todennäköisesti valita mahdollisimman korkeaa abstraktiotasoa edustava kieli, ellei tarvita selkeästi jonkun tietyn kielen erityisvahvuuksia (esim. c-kieli aikakriittisissä systeemitason sovelluksissa).

Prolog on varteenotettava vaihtoehto ohjelmointikieleksi, kun tarvitaan ilmaisuvoimaa ja korkeaa käsitetasoa. Visual Prologissa on pyritty yhdistämään Prolog-tulkki kokonaisvaltaiseen ohjelmankehitysympäristöön ála Delphi. Visual Prolog kääntäjä onkin varsin kehittynyt,eikä sillä tehtyjen reaalimaailman sovellusten ajamiseen enää tarvita epärealistisia supertietokoneita kuten Prolog-tulkeilla aikoinaan.

PDC (Prolog Development C enterin) Visual Prolog -projekti on kunnianhimoinen. Se kattaa kokonaisen ohjelmointiympäristön: välineet siirrettävien käyttöliittymien tekemiseen, erilaisia resurssieditoreja, ym. Sitä ei voi pitää pelkästään Prologin markkinointikikka, vaikka tämänhetkinen versio (Standard Version 4.0) ei vielä lunastakaan kaikkia lupauksia.

Toivomuslistalle laittaisin ensimmäiseksi jossain suhteissa kattavamman dokumentaation. Esimerkiksi C:llä tehtyjen DLL-kirjastojen kutsuminen ei onnistunut Visual Prologista edes parin päivän kokeilujen ja manuaalien selaamisenkaan jälkeen. Debuggaustyökalut ovat vielä pahasti hakusessa ja vajavaisia. Tulevissa versioissa pitäisi olla parannusta luvassa. Myös esilletulleiden bugien lista on VP:n version 4.0 Windows-versiossakin vielä luvattoman pitkä. Onneksi PDC:n kotisivun alta on imuroitavissa fiksaustiedostot ainakin havaituista bugeista.

Viitteet, kirjallisuus ja lisätietoja

[Hei] Heinonen, Matti: Funktionaalinen ohjelmointi, Ohjelmistotekniikan seminaariesitelmä, Jyväskylä, 1996
[La1] Laitila, Erkki: Visual Prolog: Perusteet, Teknolit Oy, Jyväskylä, 1996
[La2] Laitila, Erkki: Teollisuuden sovellukset: Visual Prolog, Teknolit Oy, Jyväskylä, 1996
[Pr1] Prolog Development Center, Visual Prolog - Getting Started, PDC, 1996
[Pr2] Prolog Development Center, Visual Prolog - Visual Development Environment, PDC, 1996
[Pr3] Prolog Development Center, Visual Prolog - Visual Programming Interface, PDC, 1996
[Pr4] Prolog Development Center, Visual Prolog - Language Tutorial Environment, PDC, 1996
[Wat] Watson, Des: High-Level Languages and Their Compilers, Addison Wesley, 1989
[Wei] Weiskamp, Keith et all: Artificial Intelligence with Turbo Prolog, John Wiley & Sons, 1988
http://www.pdc.com/ (ko. osoitteen alta löytyy linkkejä Prologia ja Visual Prologia käsitteleville sivuille)

[1] Borlandin ex-pääjohtajan, P. Kahnin, mukaan.