5
TURBO PROLOG di Raffaello Oe Masi Elementi di Prolog quarta parte Lo sviluppo di un programma in Prolog Dopo aver dato uno sguardo d'insieme alla struttura generale di un programma, è opportuno analizzare più da presso le caratteristiche di disegno e sviluppo di un programma in Turbo Prolog, attraverso l'esplorazione delle tecniche di redazione e di utilizzo di un programma. La cosa è abbastanza semplice se si considera che la vera fase di programmazione, in Turbo Prolog, è quella di definire, nel modo più corretto possibile, gli oggetti, le regole, e le relazioni che intercorreranno tra esse Un corretto e ben disegnato ((shell» (se così si può dire) comprendente questi particolari è la migliore garanzia di rapida efficienza, veloce debug, e buona leggibilità del programma stesso. D'altro canto nessun essere pensante, sia uomo o macchina, sarebbe capace di estrarre concetti e conoscenze da una struttura non razionale o dotata di conoscenze smozzicate. Perciò, ordine e disciplina, in Prolog come nella vita, se vogliamo chiarezza di intenti e velocità di risultati 220 Dan Shafer, nel suo eccellente volu- me «Turbo Prolog Primer», che rappre- senta parte della bibliografia essenziale per chi desidera affrontare in maniera completa e professionale lo studio di questo linguaggio, evidenzia, a pagina 85, che, nel caso del linguaggio in esa- me, non è il caso di parlare di base di dati, ma di base di conoscenze, termi- ne, d'altro canto, comunemente usato in Intelligenza Artificiale. La differenza non è peregrina ed accademica, se si considera che una base di dati è una raccolta arida e del tutto disarticolata di dati messi insieme, per necessità di cose, in base ad un unico denominatore o finalità comuni. Una base di cono- scenze, invece, non solo elenca oggetti, dati, azioni, ma descrive anche le rela- zioni intercorrenti tra essi, vale a dire che presenta anche le ((regole» che intercorrono tra gli elementi. Appare pertanto evidente che il programmatore in Prolog parte col piede buono se ha come principale intendimento quello della descrizione esatta, non opinabile né fraintendibile, degli oggetti che de- scriverà e delle interconnessioni rela- tive. I fatti Come già ricorderete dalla volta scor- sa l'elemento di base in un programma in Prolog è il blocco dei «fatti», elementi che possono essere riassunti in tre re- gole principali: - uso e significato delle lettere maiu- scole-minuscole - posizione degli elementi nella de- scrizione del fatto - uso e destinazione della punteggia- tura. La prima regola impone di stare at- tenti al tipo di carattere; generalmente, in Prolog, l'uso delle lettere maiuscole è riservato a particolari scopi; ragion per cui, almeno per adesso, va generalizza- to l'uso nelle lettere minuscole; così un fatto, nella sua forma più generica può essere così codificato: relazione (oggetto,oggetto). e, esemplificando preferisce (corrado,ibm) Come si vede, il nome del ((sapiente» di MC viene scritto tutto in minuscole; scrivere [Corrado] stravolgerebbe il sen- so del ((fatto», come vedremo successi- vamente quando parleremo delle varia- bili e degli oggetti non definiti. Per caso o per volontà di chi scrive l'esempio contiene le tre sole forme di punteggiatura più comuni utilizzate in Turbo Prolog, rappresentate dalla paren- tesi tonda [(], aperta e chiusa, dalla virgola [,I e dal punto fermo [.]. Ne vedremo, tra poco, i significati, anche se sono abbastanza intuibili. Ci preme adesso evidenziare la struttura della frase. La relazione che lega tra loro gli og- getti [preferisce] è sempre il primo ele- mento nella descrizione di un fatto, qua- lunque sia il numero ed il tipo degli oggetti coinvolti dalla relazione stessa. Pertanto espressioni come comanda (marco,technimedia) comanda (mia_moglie,casa) accompagna (antonio,andrea,scuolal sono tutte valide. Gli oggetti manipolati dalla relazione iniziale sono compresi tra parentesi e separati da virgole. Detta in altri termini, la regola può essere così semplificata: predicato_verbale (soggetto, oggetto, [com- plemento] ...) e rappresenta una situazione ideale an- che per venire incontro alle necessità MCmicrocomputer n. 78 - ottobre 1988

Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

TURBO PROLOGdi Raffaello Oe Masi

Elementi di Prologquarta parte

Lo sviluppo di un programmain Prolog

Dopo aver dato uno sguardod'insieme alla strutturagenerale di un programma, èopportuno analizzare più dapresso le caratteristiche didisegno e sviluppo di unprogramma in Turbo Prolog,attraverso l'esplorazione delletecniche di redazione e diutilizzo di un programma. Lacosa è abbastanza semplicese si considera che la verafase di programmazione, inTurbo Prolog, è quella didefinire, nel modo più correttopossibile, gli oggetti, leregole, e le relazioni cheintercorreranno tra esse Uncorretto e ben disegnato((shell» (se così si può dire)comprendente questiparticolari è la miglioregaranzia di rapida efficienza,veloce debug, e buonaleggibilità del programmastesso. D'altro canto nessunessere pensante, sia uomo omacchina, sarebbe capace diestrarre concetti econoscenze da una strutturanon razionale o dotata diconoscenze smozzicate.Perciò, ordine e disciplina, inProlog come nella vita, sevogliamo chiarezza di intenti evelocità di risultati

220

Dan Shafer, nel suo eccellente volu-me «Turbo Prolog Primer», che rappre-senta parte della bibliografia essenzialeper chi desidera affrontare in manieracompleta e professionale lo studio diquesto linguaggio, evidenzia, a pagina85, che, nel caso del linguaggio in esa-me, non è il caso di parlare di base didati, ma di base di conoscenze, termi-ne, d'altro canto, comunemente usatoin Intelligenza Artificiale. La differenzanon è peregrina ed accademica, se siconsidera che una base di dati è unaraccolta arida e del tutto disarticolata didati messi insieme, per necessità dicose, in base ad un unico denominatoreo finalità comuni. Una base di cono-scenze, invece, non solo elenca oggetti,dati, azioni, ma descrive anche le rela-zioni intercorrenti tra essi, vale a direche presenta anche le ((regole» cheintercorrono tra gli elementi. Apparepertanto evidente che il programmatorein Prolog parte col piede buono se hacome principale intendimento quellodella descrizione esatta, non opinabilené fraintendibile, degli oggetti che de-scriverà e delle interconnessioni rela-tive.

I fattiCome già ricorderete dalla volta scor-

sa l'elemento di base in un programmain Prolog è il blocco dei «fatti», elementiche possono essere riassunti in tre re-gole principali:- uso e significato delle lettere maiu-scole-minuscole- posizione degli elementi nella de-scrizione del fatto- uso e destinazione della punteggia-tura.

La prima regola impone di stare at-

tenti al tipo di carattere; generalmente,in Prolog, l'uso delle lettere maiuscole èriservato a particolari scopi; ragion percui, almeno per adesso, va generalizza-to l'uso nelle lettere minuscole; così unfatto, nella sua forma più generica puòessere così codificato:

relazione (oggetto,oggetto).e, esemplificando

preferisce (corrado,ibm)Come si vede, il nome del ((sapiente»

di MC viene scritto tutto in minuscole;scrivere [Corrado] stravolgerebbe il sen-so del ((fatto», come vedremo successi-vamente quando parleremo delle varia-bili e degli oggetti non definiti.

Per caso o per volontà di chi scrivel'esempio contiene le tre sole forme dipunteggiatura più comuni utilizzate inTurbo Prolog, rappresentate dalla paren-tesi tonda [(], aperta e chiusa, dallavirgola [,I e dal punto fermo [.]. Nevedremo, tra poco, i significati, anchese sono abbastanza intuibili. Ci premeadesso evidenziare la struttura dellafrase.

La relazione che lega tra loro gli og-getti [preferisce] è sempre il primo ele-mento nella descrizione di un fatto, qua-lunque sia il numero ed il tipo deglioggetti coinvolti dalla relazione stessa.Pertanto espressioni come

comanda (marco,technimedia)comanda (mia_moglie,casa)

accompagna (antonio,andrea,scuolalsono tutte valide. Gli oggetti manipolatidalla relazione iniziale sono compresi traparentesi e separati da virgole. Detta inaltri termini, la regola può essere cosìsemplificata:predicato_verbale (soggetto, oggetto, [com-

plemento] ...)e rappresenta una situazione ideale an-che per venire incontro alle necessità

MCmicrocomputer n. 78 - ottobre 1988

Page 2: Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

TURBO PROLOG

PJ:'edicatesguida (peJ:'sona,auto) .pJ:'efeJ:'isce(peJ:'sona,auto) .J:'egala(peJ:'sona,auto).

utiledannoso

symbol.

palestrabiJ:'ra

cioccolata

abbiamo creato una maschera d'usodella clausola; vale a dire che abbiamoindicato al calcolatore che l'istruzione«preferisce» manipolerà due symbol;allora differenzieremo le due rigne nelmodo seguente:Predicates

preferisce (persona,calcolatore)Clauses

preferisce (marco,olivetti).(notare punteggiatura e simbologial. Maper completare dobbiamo definire la na-tura del «materiale» maneggiato da[preferisce]. Allora scriviamo qualcosa dipiù complesso in un nuovo esempiomostrato nella figura a). di cui si notisempre la punteggiatura.

Si tratta di un discorso articolato epreciso, dove accanto ad una dichiara-zione iniziale del tipo di «materiale» che

peJ:'sona,autoDomains

vannobevononon mang ianomangiano

Figura A

Clausesguida (coJ:'J:'ado,bmw) .guida (massimo, lotus) .regala (marco,alfa_J:'omeo) .pJ:'eferisce (giovanna, volvo) .regala (giovanna, lancia) .guida (coJ:'rado,digital) .preferisce(massimo, pompelmo) .

Figura 8

ma invisibile all'utente ordinario è che isimboli sono maneggiati meglio dalcompilatore ma occupano maggior spa-zio in memoria, mentre con le stringheil compilatore è afflitto da un maggiorlavorio Questione di gusti o di opportu-nità ma se si considera il basso costodella memoria oggi credo che la sceltasia abbastanza semplice.

Le clausole vanno sempre definite,inizialmente attraverso un predicato; co-sa è un predicato? Semplice, è il cano-vaccio di una clausola; se vogliamo, intermini più semplici, un modello dell'i-struzione (di conoscenza) che intendia-mo fornire al compilatore. Avanti ancorauna volta col solito esempio:

preferisce (marco,olivetti)è una clausola; facciamola procedere da

preferisce (persona,calcolatore)

del compilatore, che sa che, in ognifatto, la prima parola rappresenta l'azio-ne che viene eseguita, la seconda ilsoggetto che esegue l'operazione, ecosì via, Questo modo un po' inusualedi presentare le cose diviene, dopo po-co tempo, familiare all'utente, che nonincontra più soverchie difficoltà nellacomprensione di cosa fa effettivamenteil «fatto».

In gergo, la notazione viene indicatacome tecnica di rappresentazione pre-fissa e, prima che in 'prolog, ha illustriprecedenti in L1SP. E esattamente Ilcontrario di quanto avviene, ad esem-pio, in Forth, dove domina la notazionepostfissa, o nella notazione polacca in-versa, almeno nel campo aritmetico.

Infine occorre parlare della punteggia-tura che, al contrario di quanto avvienein Pascal, è del tutto intuitiva e, comun-que, estremamente semplificata. Le no-tazioni principali sono, come abbiamogià detto, tre: il punto, la parentesi e lavirgola. Quest'ultima serve essenzial-mente a separare elementi dello stessotipo o compresi nello stesso modello; leparentesi hanno un uso intuitivo, comesi vede, e non necessitano di soverchiespiegazioni tranne per il fatto che èpossibile che livelli diversi di parentesisiano nidificati, quando un fatto è com-preso come argomento di un altro (ecosì via).

Il punto termina logicamente e fisica-mente un comando. Esso è d'obbligoalla fine di un fatto, tranne nel caso incui, omettendolo, il fatto stesso è se-guito da un supporto condizionale [if].Inoltre è consentito, in Turbo Prolog,omettere il punto al termine di un"goal", e, in questo caso, questo lin-guaggio è fuori standard.

In questo modo abbiamo costruitouna piccola base di conoscenza (ancor-ché rappresentata da una sola relazio-ne). Occorre però, in base alla gerarchiadefinita nelle puntate precedenti, dichia-rare i tipi di nome e simbolo nella sezio-ne "Domain". Come abbiamo già vistola volta scorsa, è possibile definire inte-ri, stringhe, simboli, liste. Delle differen-ze intercorrenti tra questi elementi ab-biamo già discusso a lungo le voltescorse; ci preme soprattutto ricordareche simboli e stringhe sono, per tutti gliusi pratici, normalmente intercambiabili.Ricorderemo che le stringhe hanno bi-sogno di essere definite sempre dalladoppia virgoletta ["] all'inizio ed alla fine,mentre nel secondo caso esse sononecessarie solo quando la presenza dispazi bianchi genererebbe confusionenel compilatore. Una differenza sottile

MCmicrocomputer n. 78 - ottobre 1988 221

Page 3: Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

cioccolata birra palestraandrea mangiare - - -

biagio mangiare -

carlo mangiare - - -

diana mangiare - - -

ernesto - - -

francesco - -

giovanna -

italo - - andarelu/ana- - - - andaremarcello - - - andarenora - bere -

olga bere -

pasquale - - bere - -

TURBO PROLOG

Figura C

la relazione manipolerà, viene fornito[Predicatesl un modello operativo dellaregola, e successivamente viene tra-smessa una base di conoscenza, anziper essere precisi, ben tre basi articola-te sulle relazioni [guida]. [preferisce] e[regalaI. Notare che ogni clausola ha lostesso formato del predicato immedia-tamente prima definito (a meno che,ovviamente, il formato non sia stato«costruito» in una dichiarazione di predi-cato posta in una precedente parte delprogramma).

Bene, abbiamo, anche se nel nostropiccolo, costruito una base di conoscen-ze organizzata, un mondo, comprensibi-le dalla macchina, in cui giovanna viag-gia in volvo e regala, bontà sua, auto-mobili lancia ai suoi ammiratori, corradoguida le digital (ovviamente la macchinanon è capace di distinguere assurditecnologici; in fondo il Prolog è un bo-naccione, crede a tutti) e massimo stafacendo, probabilmènte una cura dima-grante. Si vede quindi che maggiore è laquantità di informazioni che si aggiungo-no al costrutto delle clausole, miglioresarà la conoscenza del mondo dellebmw e delle lotus da parte della mac-china; infatti, dalla figura a la macchinanon può sapere cosa marco pensa deidigital e se a massimo piacciono le

222

volvo. Teniamo tutto questo fermo perun momento ed analizziamo un sempli-ce discorso umano:Andrea, Biagio, Carloe Diana mangianocioccolataErnesto, Francescoe Giovannanonmangiano cioccolataItalo, Luanae Marcello vanno in palestraNora, Olga e Pasqualebevono birrala birra è dannosala cioccolata è dannosala palestra fa bene alla salute

Questo è un tipico ragionamentoumano da cui un uomo saprebbe trarreconclusioni anche non esattamente di-chiarate nel discorso, vale a dire, adesempio, che Luana e Marcello tengo-no alla loro salute e, probabilmente,oltre che andare in palestra, non man-giano nemmeno cioccolata né bevonobirra. 1\ tutto può essere pertanto rap-presentato come in figura b. Bene, acosto di ripeterci, la figura b è la vera epropria fase dichiarativa dei domini. Sia-mo cioè alla dichiarazione:Domains

persone,cose=symbolDobbiamo, adesso, sempre nel caso

dell'esempio di linguaggio umano appe-na espresso, passare alle relazioni. Essepossono essere così riassunte, rispetti-vamente in linguaggio umano:

le persone mangiano le cosele persone non mangiano le cosele persone vanno nelle cosele persone bevono cosele cose sono cosele cose fanno cose.Siamo alla fase della definizione dei

predicati: possiamo perciò sCrivere:Predicatesmangiare (persone.cose).non_mangiare (persone.cose).andare (persone,cose).bere (persone.cose).essere (cose,cose)fare (cose,cose)

Ovviamente niente impedisce di usa-re altri tempi invece degli infiniti perdefinire l'azione del predicato: ad esem-pio una dichiarazione di predicato deltipo

fa (cosa,cosa)in stretta analogia alla frase di linguag-gio naturale «La palestra fa bene allasalute», va lo stesso bene, ma cosasuccede se vogliamo esprimere lo stes-so concetto utilizzando più cose o desi-deriamo esprimere un concetto con unverbo passato? Occorrerebbe definirediversi predicati, tutti eseguenti in fon-do la stessa operazione, e la cosa diver-rebbe impratica; meglio pertanto sce-gliere solo l'infinito, tanto il Prolog non èancora riuscito a comprendere la diffe-renza di tempi.

È venuto adesso il momento di defini-re le clausole, i veri e propri fatti che sidesiderano rappresentare. La tecnicapiù semplice, ma non la più breve, perdefinire quanto si era detto in paroleumane è la seguente:Clausesmangiare (andrea.cioccolata).mangiare (biagio,cioccolata).mangiare (carlo,cioccolata).mangiare (diana,cioccolata).non_mangiare (ernesto,cioccolata).non_mangiare (francesco.cioccolata).non_mangiare (giovanna,cioccolata).andare (italo,palestra).andare (Iuana,palestra).andare (marcello,palestra).bere (nora,birra)bere (olga,birra).bere (pasquale.birra).essere_dannosa (birra).essere_dannosa (cioccolata).fare_bene (palestra,salute).

È tutto; abbiamo costruito, in Prolog,la nostra base di conoscenza; anche seci ha comportato una serie abbastanzalunga di battiture alla tastiera; comeabbiamo già detto esiste un metodo piùsemplice per risolvere elegantemente lacosa, ma non è questo il momento diparlarne. Vedremo che cosa fare di tuttaquesta filastrocca la prossima volta.

Me

MCmicrocomputer n. 78 - ottobre 1988

Page 4: Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

MONITOR 12" TTL L. 150.000 FN--- -----

MONITOR 12" COMPOSITO L. 150.000 Ambra----

MONITOR DUAL 12" L. 200.000 FN

MONITOR A COLORE MUL TITECH L. 555.000MONITOR PHILlPS COL. 8833 L. 500.000

CITIZEN 120 D L. 360,000120 CPS, SEl EPSON IBM 80

COL. TRATO IN TRAZIONE, FRI·ZIONE INTER. OPZIONALE IBM/COMMOOORE

CITIZEN LSP 100 CITIZEN MSP 55L. 550.000 L. 1.230.000

·160 cps, 80 COL. 250/300 CAR/SECcE6 C~CITIZEN MSP 10E CITIZEN HQP 40

L.650.0oo L. 1.160.000·160 CARISEC, 80 COL. ·24 \GHI, 200 CPS ALTISSIMA QUALITÀ

CITIZEN MSP 15E CITIZEN HQP 45L. 680.000 L. 1.530.000

160 CARISEC, 136 COL. . 24 ~GHI, 200 CPS ALTISSIMA QUALITÀCITIZEN MSP 40 CITIZEN PREMIERE 35

L. 775.000 L. 1.250.000·200/240 CARISEC. 136 COL. - MARGHERITA PROFESSIONALE, 35 CPS

CITIZEN MSP 45 CITIZEN OVERTURE 110L. 950.000 • L. 3.600.000

·200/240 CARISEC, 136 COL. . STAMPANTE LASERTUTTI I PRODOTTI CITIZIEN SONO COPERTI

DA CERTIFICATO DI GARANZIA DELLA VALIDITÀ DI DUE ANNI

TELEFAX MURATA M-1L. 1.500.000

- COMPATIBILITÀ G2 G3- VELOCITÀ DI TRASMISSIONE 15 SECONDI- APPARECCHIO TELEFONICO A TASTIERA INCORPORATO- FOTOCOPIATORE- RICEZIONE AUTOMATICA- ROTOLO CARTA TERMICA 216 mm x 30 metri.- OROLOGIO/CALENDARIO DIGITALE

STAMPANTI CITIZEN GRAFICA - NLQCITIZEN MSP 50

L. 1050.000250/300 CARISEC., 80 COL.

L.350.000L.680.000L. 100.000L. 220.000

---L.300.000L. 110.000L. 40.000

------L. 35.000L. 28.000L. 190.000

- ---L.650.000L. 110.000L. 140.000L. 190.000

----L. 190.000L. 49.000L. 15.000L. 60.000L. 59.000L. 45.000

PC XT IBM COMPATIBILEL. 1.200.000

SCHEDA MADRE 6/10 MHZ, 1 DRIVE360K, SCHEDA GRAFICA HERCU-LUS O CGA, 1 HARD DISK 20 MEGA,256 ESPANDI BILE A 640K SU PIA-STRA, TASTIERA AVANZATA 101TASTI.

386 TOWER 16/20 MHZL. 5.750.000

MICROPROCESSORE 8028616/20MHZ O WAIT RAM 2 MB (80 NS)ESPANDI BILE A 16 MB, 8 SLOT,SCHEDA EGA, 1 DRIVE DA 1,2 MB1 DRIVE 35 720 KB, WINCHESTERDA 40 MB.

PC AT IBM COMPATIBILEL. 2.600.000

SCHEDA MADRE 80286 12 MHZ, OWAIT. 512 K ESPANDI BILE A 1024 K,1 DRIVE 5,25" DA 1.2 MBYTE 1 Wl N-CHESTER DA 40 MBYTE 20MS,SCHEDA SUPER EGA, TASTIERAAVANZATA 101 TASTI.

PC XT IBM COMPATIBILEL. 750.000

SCHEDA MADRE 6/10 MHZ, 1DRIVE 360K, SCHEDA CGA OHERCULUS, 256K ESPANDIBI-LE A 640K SU PIASTRA, TA-STIERA AVANZATA 101 TASTI

HARD DISK SEAGATE 20 MB- - ~--~HARD~ISK~ONTROLDATA 40 _~.1B _HARD DISK CONTROLLER PER XT---HARD DISK CONTROLLER PER AT

- -SCHEDA GRAFICA SUPER E.G.A.- --SCHEDA MULTI I/OSCHEDA SERIALE-- -SCHEDA PARALLELASCHEDA PORTA JOYSTICKSCHEDA MADRE XTSCHEDA MADRE AT (12 MHZ ~ WAIT)TASTIERA AVANZATA 101 TASTIDRIVE 5,25 360KBDRIVE 5,25 1,2MBDRIVE 3,50 710KBDRIVE CONTROLLERCAVO PARALLELODATA SWITCH A 2 PORTE

---MOUSE ANKO- -JOYSTICK I.B.M. ANKO

Page 5: Lo sviluppo di un programma in Prolog · 2010. 2. 3. · pJ:'efeJ:'isce(peJ:'sona,auto) . J:'egala(peJ:'sona,auto). utile dannoso symbol. palestra biJ:'ra cioccolata abbiamo creato

SOLO I MIGLIORI.PERVOI.

=DISCOM~Discom, ovvero una delle più dinamiche società di distribuzione nate negli ultimi dieci anni.Discom si è imposta sul mercato grazie alla continuità del suo servizio, alla possibilità di offri-re il prezzo migliore, alla capacità di scegliere sempre i prodotti vincenti, cioè i migliori, per voi.

00128 Roma - Via Marcello Garosi, 23Telef. (06) 52.07.839-52.07.917 - Telex 620238 - Telefax (06) 52.05.433