FUNZIONALITÁ DELL’ELABORATORE ELETTRONICO
di: Oscar Bettelli
Le operazioni principali del microprocessore consistono nel caricamento di registri con numeri binari, confronto di numeri binari e operazioni di somma/sottrazione di numeri binari. L'esecuzione di istruzioni, a loro volta codificate con numeri binari, avviene sequenzialmente; il flusso dell'esecuzione viene determinato da salti in avanti o all'indietro condizionatamente a confronti tra numeri binari. Sostanzialmente ogni numero binario rappresenta una informazione la cui struttura emerge dall'insieme complessivamente considerato della sequenza di istruzioni. Tutte le informazioni sono pertanto codificate, si assume che una informazione codificata sia un "dato" a disposizione del programma; l'informazione, concettualmente, presenta degli aspetti difficilmente definibili, ma una informazione codificata, ossia un dato, è facilmente descrivibile ed è possibile perfino definire una misura del contenuto di informazione (sostanzialmente il numero di bit - scelte binarie necessarie per codificarla) presente nel dato.
Il principale modo per modificare la sequenza di esecuzione si basa sulle regole logiche base, che sono:
AND - congiunzione di dati
OR - disgiunzione di dati
NOT - negazione di dati
Il significato del dato necessita comunque di un attore che ne riconosca, appunto, il significato; per la macchina sono tutte configurazione di bit o, se vogliamo, numeri, numeri binari, ma sempre numeri. Associare ad un numero un significato è reativamente semplice: si prende un insieme di cardinalità finita e lo si numera, ogni numero rappresenterà un elemento dell'insieme; per esempio, se "lupo" "agnello" "pecora" è l'insieme di tre elementi che vogliamo rappresentare, basterà associare il numero 1 al lupo, il 2 all' agnello ed il 3 alla pecora; ora, per la macchina questa associazione avviene tra i dati e non tra gli oggetti rappresentati, in altri termini, 1 significa stringa di quattro caratteri di cui il primo è "l", il secondo "u", il terzo "p" ed il quarto "o" !
Il che non ha niente a che fare col fatto che il lupo si mangia le pecore o anche che 1 si mangia 3; queste sono informazioni ad un altro livello di significato, livello non ancora accessibile al calcolatore sulla base delle associazioni numero-elemento dell'insieme.
Una prima semplice associazione consiste nel numerare i caratteri, con questa convenzione il calcolatore è in grado di manipolare i caratteri, essendo in grado di manipolare i numeri. Una ulteriore possibilità consiste nel raggruppare i caratteri in "stringhe", ed allora il calcolatore diviene in grado di manipolare le parole (come stringhe di caratteri ovviamente).
Con le stringhe di caratteri possiamo costruire delle frasi che descrivono "fatti" del nostro mondo, per esempio: "Un lupo, di solito, le pecore se le mangia". Le frasi così costruite sono per il calcolatore delle stringhe di caratteri che può comodamente manipolare.
È a questo punto che interviene la prima rottura con le modalità di comunicazione umana: la frase per un essere umano ha un significato preciso, parla di lupi, di pecore e di mangiare; per l'elaboratore, invece, non è altro che una stringa di caratteri senza significato, esso è in grado di memorizzarla, di copiarla, di presentarla, di modificarla, ma non è in grado di associarla ad un "lupo" che "mangia": il concetto di lupo gli sfugge. Occorre a questo punto un ulteriore livello di associazione che possa far corrispondere al "lupo" qualcosa di complesso e rappresentato all'interno dell'elaboratore come dato.
Ma torniamo al microprocessore che con incredibile velocità compie operazioni elementari. Il processo di rappresentazione prosegue e si passa da istruzioni di salto condizionato a strutture un po' più complesse di controllo del flusso dell'elaborazione: i programmi che traducono programmi, i compilatori.
Il codice interpretabile direttamente dal microprocessore è relativamente semplice ma estremamente faticoso per un programmatore, poiché occorre di volta in volta segmentare in passi logici estremamente piccoli i problemi reali che si vogliono risolvere.
Il compilatore, che è un programma, consente al programmatore di lavorare ad un livello più evoluto: il compilatore traduce parole come "IF" in numeri di istruzione direttamente eseguibili dal microprocessore.
Riprendiamo la frase precedente nella forma semplificata: "lupo mangia pecora"; questa è una stringa e il calcolatore può "indirizzarla", ovvero identificarla con un numero. Suddividiamola in tre stringhe, cioè parole:
"lupo" "mangia" "pecora". In questo caso al calcolatore occorrono tre numeri per indirizzare le parole, che per lui sono ancora stringhe. Per noi invece sono due animali in relazione reciproca; cerchiamo di rappresentare con dei dati quest'ultima informazione.
Occorre definire delle classi: gli animali e le azioni (come minimo). La quantità di numeri necessari aumenta ad un ritmo esponenziale. Supponiamo di usare la seguente convenzione:
per gli animali useremo i numeri da 1 a 10
per le azioni useremo i numeri oltre il 10.
Allora:
1 = lupo
2 = pecora
11 = mangia
la tripla 11(1,2) rappresenta la frase originaria ma anche 11(2,1) potrebbe essere candidata, occorre perciò specificare che "mangia" non è invertibile, è il lupo che mangia e non la pecora. In pratica, relazioni dinamiche divengono relazioni spaziali, statiche dipendenti dal formato stesso in cui l'informazione è codificata; ci siamo ulteriormente allontanati dal mondo reale: occorre ragionare in uno pseudo-mondo formale in cui le informazioni sono rappresentate da dati in relazione spaziale. Le istruzioni codificabili da un normale compilatore sottostanno ai seguenti paradigmi principali:
1) la sequenza
2) IF condizione THEN azione 1 ELSE azione2
3) REPEAT (FOR WHILE UNTIL condizione) azione
Infatti, a livello di microprocessore le operazioni fondamentali di cui disponiamo sono la sequenza, il salto condizionato ed il salto incondizionato; con queste operazioni fondamentali siamo in grado di costruire, appunto, le strutture fondamentali sopra elencate. Il microprocessore è in grado di indirizzare locazioni di memoria che contengono stringhe di bit: e con stringhe di bit che rappresentiamo le informazioni, in particolare codifichiamo le informazioni in "dati" per poterle manipolare. Il significato di ogni dato risiede in relazioni spaziali e correlazioni di indirizzi. Per esempio, con il concetto di file raggruppiamo dati che posseggono una unica interpretazione logica, e con il concetto di record raggruppiamo campi relativamente ad una medesima entità logica. Nella memoria del calcolatore queste relazioni sono rappresentate mediante rapporti spaziali e mediante relazioni d'ordine.
È possibile rappresentare i dati e i programmi mediante regole logiche del tipo xn :- x1,x2,...,xk che si interpretano nel seguente modo: se sono veri x1,x2,...,xk allora xn è vero.
Questo tipo di rappresentazione la si trova in linguaggi logici come il PROLOG, in cui dati e programmi sono fortemente interconnessi. Il PROLOG funziona grazie ad un motore inferenziale che attiva le regole determinando quali predicati diventano veri ed agendo di conseguenza. Il PROLOG è strettamente connesso alla logica formale inferenziale del primo ordine, in cui la verità o la falsità di alcune affermazioni dipende, tramite precise regole, dalla verità o falsità di altre ad esse correlate. Il problema della rappresentazione rimane, ogni stringa, per il calcolatore, rappresenta solo se stessa ed il significato va attribuito ad essa da un operatore umano.
Sono stati scritti anche programmi che rispondono a domande in forma colloquiale che sembra comprendano il discorso man mano che procede, ma ad una analisi più attenta ci si rende conto che tali programmi si basano sull'individuazione di parole chiave e che eventualmente utilizzano funzioni random quando si trovano in difficoltà. Programmi di questo tipo finora realizzati (ELIZA) in realtà non comprendono le domande realmente ma utilizzano regole "formali" per fornire una risposta che sembra essere conseguente, per esempio alla frase:
"penso sempre alla mia ragazza"
risponde:
"la sua ragazza la preoccupa?"
Il problema fondamentale della comprensione delle frasi non è stato ancora risolto, anche se programmi di questo tipo presentano un aspetto particolarmente stimolante.
Il problema di modificare la risposta in funzione dell'esperienza è affrontabile sulla base di una semplice operazione che il calcolatore è in grado di eseguire: la memorizzazione di un dato. Oscar Bettelli © 1997 Oscar Bettelli - © 1998 ARPA Publishing. Tutti i diritti riservati. Riproduzione vietata.
Pag.successiva|Torna al sommario
La violazione del copyright e/o la copia illecita del materiale riprodotto in queste pagine, la diffusione non autorizzata dello stesso in qualunque forma contravviene alle normative vigenti sui diritti d'autore e sul copyright.
Per inserire i tuoi testi nel sito ARPANet, clicca qui!