|
L'informatica nella scuola usando il PROLOG (seconda puntata) |
|
(“Scuola e Didattica”, Editrice La Scuola, Brescia, Anno XXXIV, n.8 (15 gennaio 1989)
Seconda parte: ELABORAZIONE DELLE CONOSCENZE Dopo aver presentato, nella prima parte dell’articolo pubblicata sul n. 5, i primi elementi del linguaggio PROLOG, l’Autore presenta qui ulteriori nozioni che possono rappresentare il bagaglio minimo per affrontare un affascinante viaggio nel mondo della programmazione logica (La redazione)
Abbiamo visto che il computer può essere utilizzato per archiviare informazioni: queste vengono conservate e restituite così come sono state immagazzinate. Ora prenderemo in esame il computer come elaboratore di informazioni. Cominciamo intanto a familiarizzare con un'altra frase PROLOG. Ci consentirà di tradurre il periodo: se la mamma sta in casa, Marco studia la lezione. E'un periodo ipotetico, detto del primo tipo o della realtà: l'evento espresso dalla proposizione reggente (Marco studia la lezione) si verifica soltanto a condizione che, nell'IPOTESI che si verifichi prima e realmente l'evento espresso dalla dipendente (la mamma sta in casa). Ecco come si può tradurre in PROLOG: studia(marco,lezione):- sta_in(mamma,casa). dove il simbolo :- si legge "SE", o meglio "E' VERO SE".
studia(marco,lezione) è detto TESTA della REGOLA. sta_in(mamma,casa) è detto CORPO della REGOLA.
Analogamente: Italiano: se il babbo ha comprato il gelato, Giorgio lo mangia. PROLOG:mangia(giorgio,gelato):- ha_comprato(babbo,gelato).
In Italiano, la frase condizionale precede, in genere, la conclusione; in PROLOG si ha il contrario. Se in italiano le condizioni sono più di una, allora in PROLOG il CORPO della REGOLA sarà formato da più frasi semplici separate fra loro da una virgola. Esempio: Italiano: se la mamma sta in casa e lo controlla, Marco studia la lezione. PROLOG: studia(marco,lezione):-sta_in(mamma,casa), controlla(mamma,marco). Solo se tutte e due le condizioni saranno verificate, Marco studierà la lezione (indipendentemente dall'ordine con cui si susseguono le condizioni stesse). Le REGOLE permettono di allargare la BASE DI CONOSCENZA, precedentemente costituita solo da FATTI, aumentando le potenzialità di rappresentazione e di interrogazione. Come primo esempio, riprendiamo in esame l'AMBIENTE dell'altra volta, nel quale figurava la seguente base di FATTI: abita_a(marco,roma). abita_a(giovanni,milano). abita_a(louis,parigi). abita_a(tiziana,roma). è_capitale_di(roma,italia). è_capitale_di(parigi,francia).
Vogliamo mettere il computer in grado di rispondere alla domanda: chi abita in una capitale? La domanda non è direttamente traducibile in PROLOG, nel_nostro_AMBIENTE, in quanto nessuno dei due predicati di cui disponiamo, cioè abita_a ed è_capitale_di, singolarmente preso, permette di tradurre in PROLOG tale frase-domanda. La questione può essere risolta in più modi. Primo. Aggiungiamo i seguenti nuovi FATTI, coerenti con i precedenti: abita_in_capitale(marco). abita_in_capitale(louis). abita_in_capitale(tiziana). A questo punto il computer alla Domanda: abita_in_capitale(Persona). risponde ovviamente Persona = marco Persona = louis Persona = tiziana. In effetti però, procedendo in questo modo, noi stessi abbiamo allargato la BASE DI CONOSCENZA, in quanto noi stessi abbiamo effettuato materialmente la ricerca delle persone che abitano in una capitale, escludendo, ad esempio, Giovanni. Secondo. C'è un modo più rapido, elegante e vantaggioso per noi: far cercare al computer, in vece nostra, i nomi delle persone che rispondono al requisito di abitare in una capitale. Come? Insegnando al computer, attraverso una REGOLA, che cosa vuol dire che "una persona abita in una capitale". E lo dobbiamo insegnare, ovviamente, sulla base degli "schemi di frase" che già fanno parte dell'AMBIENTE, cioè utilizzando i predicati abita_a ed è_capitale_di. In altre parole, occorre esprimere il "nuovo" in termini di vecchia conoscenza. Diremo, ad esempio, che chi abita in una capitale è una persona che abita in una città e questa città è capitale di un qualche stato. Cioè: Se una persona abita in una città e questa città è capitale di uno stato (qualsiasi), allora quella persona abita in una capitale. Ora possiamo tradurre il tutto in PROLOG mediante la REGOLA: abita_in_capitale(Persona):- abita_a(Persona,Città),è_capitale_di(Città,_). dove la virgola sta al posto della congiunzione "e" (ed il trattino "_" sta, in questo caso, per "stato qualsiasi").
In pratica, è stato introdotto nella BASE DI CONOSCENZA il nuovo predicato abita_in_capitale, non (come nel primo modo) attraverso una elencazione di FATTI, ma come TESTA di una REGOLA, il cui CORPO è costituito da predicati già noti. Alla Domanda : abita_in_capitale(Persona) il computer cercherà, in vece nostra, in base a quanto gli abbiamo insegnato, le persone abitanti in capitali e risponderà: Persona=marco Persona=louis Persona=tiziana Questa volta però la fatica di selezionare le persone che rispondono al requisito richiesto è stata addossata al computer! In effetti, noi ci siamo limitati a dare una definizione, cioè abbiamo descritto che cosa vuol dire abitare in una capitale, o, in altre parole, abbiamo precisato qual è il requisito che contraddistingue la persona che abita in una capitale: una persona P abita in una capitale, se questa persona P abita in una città C e questa città C è capitale di uno stato (interpretazione dichiarativa). Per il computer la stessa REGOLA suona invece così: per trovare le persone che abitano in una capitale, devo anzitutto individuare, per ogni persona la città dove abita e quindi devo verificare se questa città è capitale di uno stato qualsiasi (interpretazione procedurale).
Seguiamo qualche altro esempio: si potrà intravedere quanto sia vasto il campo di applicazione delle REGOLE nella rappresentazione e nella elaborazione delle conoscenze. Consideriamo il seguente AMBIENTE: mangia(leone,carne). mangia(uomo,carne). mangia(cane,carne). mangia(mucca,erba). mangia(dromedario,erba). mangia(uomo,erba). mangia(gatto,carne).
Potremmo arricchire la BASE DI CONOSCENZA aggiungendo alcune REGOLE di facile lettura: è_erbivoro(Animale):- mangia(Animale,erba). è_carnivoro(Animale):- mangia(Animale,carne). è_onnivoro(Animale):- mangia(Animale,carne), mangia(Animale,erba).
A questo punto si possono porre domande, utilizzando anche i nuovi predicati è_erbivoro, è_carnivoro, è_onnivoro definiti mediante REGOLE: il computer risponderà .... a tono.
Altro AMBIENTE. Siamo a scuola. insegna(ricci,inglese,classe_2A). insegna(giorgi,matematica,classe_1B). insegna(rippi,italiano,classe_1B). frequenta(giorgio,classe_1B). frequenta(maria,classe_2A). frequenta(mirco,classe_1B).
Potremmo, ad esempio, scrivere una REGOLA che ci permetta di individuare gli insegnanti di un dato ragazzo:
è_insegnante_di(Professore,Ragazzo):- insegna(Professore,_,Classe), frequenta(Ragazzo,Classe). Cioè: un professore è insegnante di un ragazzo, se quel professore insegna (una materia qualsiasi) in una classe e il ragazzo frequenta quella stessa classe. In altre parole, è essenziale che esista_una_classe nella quale operano entrambi, professore ed alunno. Se poniamo la Domanda: è_insegnante_di(Professore,mirco) avremo come risposta: Professore=giorgi Professore=rippi Ma la stessa REGOLA può essere utilizzata anche ....all'inverso: Domanda: è_insegnante_di(rippi,Ragazzo) avremo come risposta: Ragazzo=giorgio Ragazzo=mirco Ed ancora: se, nella domanda, entrambi gli argomenti sono variabili, avremo di ritorno tutte le coppie possibili insegnante-alunno. Analogamente si potrebbe definire "compagni di classe" ecc. In pratica non esiste un limite alla varietà e al numero di REGOLE che si possono introdurre su una BASE DI CONOSCENZA. Tanto più che la TESTA di una REGOLA può essere utilizzata nel CORPO di un'altra REGOLA e, addirittura, è possibile costruire una REGOLA che utilizza, fra le condizioni, cioè nel CORPO, anche se stessa (in versione di differente livello). Non possiamo trattarne più diffusamente, in questa sede. Qui ci siamo limitati a mostrare alcuni esempi di applicazione del PROLOG per descrivere ed elaborare conoscenze: l'AMBIENTE è un frammento di conoscenza, espresso mediante entità e relazioni. Singolare è il fatto che noi, nell'introdurre le entità e le relazioni, possiamo continuare a "pensare in modo ordinario", cioè tenendo d'occhio e la correttezza sintattica e la correttezza semantica: il computer, che manipolerà tali relazioni operando esclusivamente sul piano sintattico, darà risposte che risultano essere corrette (come abbiamo già avuto modo di vedere) anche rispetto alla semantica. A questo proposito, è senz'altro suggestivo il seguente AMBIENTE: è_mortale(P):-è_uomo(P). è_uomo(socrate).
La seconda frase si traduce: Socrate è un uomo. La prima frase, tradotta alla lettera: se P è un uomo, allora P è mortale. Cioè: Chi è uomo, è mortale. Ed anche: Ogni uomo è mortale. Infine: Tutti gli uomini sono mortali. In altre parole, il nostro AMBIENTE è costituito dalla traduzione in PROLOG delle due premesse del famoso sillogismo aristotelico. Ebbene se poniamo la domanda: è_mortale(Chi) si ha la risposta: Chi=socrate. Il computer, che parla PROLOG, risponde ad ogni frase-domanda utilizzando una regola di deduzione o inferenza più ampia di quella del sillogismo. Anch'essa è tratta dalla logica: una scienza molto antica, che ha conosciuto in questi ultimi due secoli un nuovo vigore, per l'apporto di più ambiti disciplinari, soprattutto della matematica. Lo vedremo la prossima volta. |
|
|