[generale]Variabili e tipi
anzitutto mi scuso se non pongo domande interessanti, ma diciamo che è da poco che muovo i miei passi nell'informatica e lo sto facendo un poco da autodidatta
In informatica, forse il concetto più importante , è quello di variabile, che forse, non è completamente affine al concetto analogo a quello di matematica.
Una variabile diciamo che si può vedere come una locazione di memoria, dove possono essere immessi (dall'utente o dal programmatore, o dal programma stesso ) i dati su cui il programma deve lavorare. E' giusto?
e i dati immessi in una variabile possono cambiare durante l'esecuzione,cioè il programma può "decidere" di rimpiazzare il valore che ha la variabile, per sostituirlo con uno nuovo durante l'esecuzione del programma. è giusto?
invece il tipo, è un poco come il dominio di definizione di una funzione, in senso matematico, cioè assegnando a una variabile un tipo, si dice "quali valori " sono ammessi in quella variabile, e quali operazioni possono essere compiute con tali valori. it's right?
Ora, sono incappato in questo termine "variabile strutturata".
Ora so che fin quando si parla di dati strutturati, sono dati diciamo tutti dello stesso genere , che sono diciamo "strutturati" mediante tabelle o altro, per essere facilmente modellati e utilizzati.
Ma le variabili? cosa si intende per variabile strutturata e tipo strutturato?
grazie mille

In informatica, forse il concetto più importante , è quello di variabile, che forse, non è completamente affine al concetto analogo a quello di matematica.
Una variabile diciamo che si può vedere come una locazione di memoria, dove possono essere immessi (dall'utente o dal programmatore, o dal programma stesso ) i dati su cui il programma deve lavorare. E' giusto?
e i dati immessi in una variabile possono cambiare durante l'esecuzione,cioè il programma può "decidere" di rimpiazzare il valore che ha la variabile, per sostituirlo con uno nuovo durante l'esecuzione del programma. è giusto?
invece il tipo, è un poco come il dominio di definizione di una funzione, in senso matematico, cioè assegnando a una variabile un tipo, si dice "quali valori " sono ammessi in quella variabile, e quali operazioni possono essere compiute con tali valori. it's right?
Ora, sono incappato in questo termine "variabile strutturata".
Ora so che fin quando si parla di dati strutturati, sono dati diciamo tutti dello stesso genere , che sono diciamo "strutturati" mediante tabelle o altro, per essere facilmente modellati e utilizzati.
Ma le variabili? cosa si intende per variabile strutturata e tipo strutturato?
grazie mille
Risposte
forse , girovagando un po tra il mio libro, sono giunto alla conclusione.
Mi sono costruito un esempio : ad esempio una variabile strutturata è un array.
diciamo che sono variabili che memorizzano diversi elementi elementi informativi che possono essere oppure non essere dello stesso tipo. Ad esempio un array lo posso vedere come una tabella, come locazioni di memoria consecutive, dove vengono memorizzate consecutivamente informazioni dello stesso tipo.
Oppure una record struct che è più un vettore multidimensionale, che immagazzina informazioni non dello stesso tipo.
ad esempio è un record : data - giorno - mese. Giusto?
quindi la differenza sostanziale che c'è tra "variabile" e "variabile strutturata" è che la prima è una locazione di memoria attua a contenere al più un informazione, invece la variabile strutturata sono locazioni di memoria attue a contenere più elementi informativi, dico bene?
Mi sono costruito un esempio : ad esempio una variabile strutturata è un array.
diciamo che sono variabili che memorizzano diversi elementi elementi informativi che possono essere oppure non essere dello stesso tipo. Ad esempio un array lo posso vedere come una tabella, come locazioni di memoria consecutive, dove vengono memorizzate consecutivamente informazioni dello stesso tipo.
Oppure una record struct che è più un vettore multidimensionale, che immagazzina informazioni non dello stesso tipo.
ad esempio è un record : data - giorno - mese. Giusto?
quindi la differenza sostanziale che c'è tra "variabile" e "variabile strutturata" è che la prima è una locazione di memoria attua a contenere al più un informazione, invece la variabile strutturata sono locazioni di memoria attue a contenere più elementi informativi, dico bene?
"Kashaman":
anzitutto mi scuso se non pongo domande interessanti, ma diciamo che è da poco che muovo i miei passi nell'informatica e lo sto facendo un poco da autodidatta![]()
In informatica, forse il concetto più importante , è quello di variabile, che forse, non è completamente affine al concetto analogo a quello di matematica.
Una variabile diciamo che si può vedere come una locazione di memoria, dove possono essere immessi (dall'utente o dal programmatore, o dal programma stesso ) i dati su cui il programma deve lavorare. E' giusto?
e i dati immessi in una variabile possono cambiare durante l'esecuzione,cioè il programma può "decidere" di rimpiazzare il valore che ha la variabile, per sostituirlo con uno nuovo durante l'esecuzione del programma. è giusto?
Dipende. In alcuni linguaggi sì, in altri no, in altri solo in alcuni casi. Ad esempio nei linguaggi funzionali le variabili sono più simili a quelle matematiche, non c'è il concetto di assegnamento ma solo di uguaglianza
x = 5 // "x" è un altro modo per dire "5" x = 9 // Non ha senso, x è 5
invece il tipo, è un poco come il dominio di definizione di una funzione, in senso matematico, cioè assegnando a una variabile un tipo, si dice "quali valori " sono ammessi in quella variabile, e quali operazioni possono essere compiute con tali valori. it's right?
Più o meno. Sui tipi c'è molto da dire, questo è un buon punto di partenza.
Ma le variabili? cosa si intende per variabile strutturata e tipo strutturato?
Di solito si intende una variabile composta da più campi, che formano una struttura. Ad esempio una data che è formata da tre interi (anno, mese, giorno).
struct Data { int anno, mese, giorno; }; Data t t.anno = 1994 t.mese = 6 t.giorno = 24
O anche strutture più complesse.
struct Capitolo { string titolo; list<string> paragrafi; }; struct Documento { string titolo; list<Capitolo> capitoli; };
Mhh, quindi diciamo che l'unica definizione plausibile generale di variabile sia "locazione di memoria", perché da come tu dici non in tutti i linguaggi esse sono concepite in termini di assegnazione. Nei linguaggi funzionali "variabile" si confonde con "costante" o sbaglio?
passando alla variabile strutturata, in un certo senso , si può immaginare come una variabile "organizzata".
Cioè attua a non prendere solo una singola informazione, ma bensì un agglomerato di informazioni ben organizzate. Dico bene?
l'esempio 1 _ che hai tu posto è una record giusto?
Ad esempio, nell'esempio che hai dato, cosa si può dire (molto informalmente... non tanto tecnicamente) circa come vengono registrate le informazioni in memoria?
un'altro esempio di variabile strutturata è ad esempio un'array, giusto? però diciamo che è più limitativo rispetto ad una record-struct , visto che può contenere solo informazioni dello stesso tipo.
PS : grazie claudio!
passando alla variabile strutturata, in un certo senso , si può immaginare come una variabile "organizzata".
Cioè attua a non prendere solo una singola informazione, ma bensì un agglomerato di informazioni ben organizzate. Dico bene?
l'esempio 1 _ che hai tu posto è una record giusto?
Ad esempio, nell'esempio che hai dato, cosa si può dire (molto informalmente... non tanto tecnicamente) circa come vengono registrate le informazioni in memoria?
un'altro esempio di variabile strutturata è ad esempio un'array, giusto? però diciamo che è più limitativo rispetto ad una record-struct , visto che può contenere solo informazioni dello stesso tipo.
PS : grazie claudio!
"Kashaman":
Mhh, quindi diciamo che l'unica definizione plausibile generale di variabile sia "locazione di memoria",
No.
Nei linguaggi RAM basati sul concetto di Memoria, si ha la definizione di identificatore. Fissiamo che una variabile ha associato un indirizzo di una locazione di memoria, ed è il contenuto di questa locazione che varia.
Un identificatore è un elemento di un insieme chiamata Ambiente (diciamo un insieme di lettere dell'alfabeto) a cui si può associare una locazione di memoria (un indirizzo).
Una locazione tipizzata (un sottoinsieme finito della memoria), ha salvato in esso una valore (se hai fatto un po' di architettura saprai il concetto di indirizzamento indiretto).
Per far corrispondere un identificatore (di un ambiente) con una locazione, ed una locazione (di una memoria) con un valore, esiste il concetto di aggiornamento di memoria che lega l'ambiente con la memoria. Diciamo uno strato che gestisce e collega i valori con gli identificatori di un programma utente, cioè il sistema operativo.
Nei linguaggi funzionali "variabile" si confonde con "costante" o sbaglio?
non sbagli, diciamo che si annullano a vicenda. Non essendoci il concetto di memoria ma solo di Ambiente, le variabili sono come le costanti (in senso semantico non di definzione), essendoci solo associazione "identificatore"-valore e non identificatore-locazione-valore.
"claudio86":
non c'è il concetto di assegnamento ma solo di uguaglianza
nì.
Nei funzionali parlare di uguaglianza bisogna stare attenti. Anche qui dipende dal linguaggio, ma in generale si parla più di operazione di sostituzione.
"Kashaman":
passando alla variabile strutturata, in un certo senso , si può immaginare come una variabile "organizzata".
Cioè attua a non prendere solo una singola informazione, ma bensì un agglomerato di informazioni ben organizzate. Dico bene?
l'esempio 1 _ che hai tu posto è una record giusto?
Sì, serve esattamente a rappresentare informazioni aggregate. In teoria non sono necessarie, potresti fare tutto usando tipi primitivi, ma semplifica notevolmente la programmazione.
"record" può significare molte cose, ma potrebbe andare bene.
"Kashaman":
Ad esempio, nell'esempio che hai dato, cosa si può dire (molto informalmente... non tanto tecnicamente) circa come vengono registrate le informazioni in memoria?
Poco o niente. Dipende da linguaggio, implementazione, ambiente, architettura... Ad esempio in C e C++ i campi di una struttura sono indicativamente adiacenti, ma tra di essi potrebbe esserci del padding (quindi la dimensione della struttura è maggiore della somma delle dimensioni dei campi). Inoltre possono essere allocati in zone diverse della memoria (heap, stack, pool condiviso, pool custom...). Una lista poi può essere implementata in molti modi.
"Kashaman":
un'altro esempio di variabile strutturata è ad esempio un'array, giusto? però diciamo che è più limitativo rispetto ad una record-struct , visto che può contenere solo informazioni dello stesso tipo.
Non saprei se un array si possa definire un tipo strutturato o se possa essere considerato un tipo primitivo.
"hamming_burst":
nì.
Nei funzionali parlare di uguaglianza bisogna stare attenti. Anche qui dipende dal linguaggio, ma in generale si parla più di operazione di sostituzione.
Forse mi sono espresso male. Assegnare un'espressione ad una variabile vuol dire dare un nuovo nome a quell'espressione (come una costante in effetti). Una volta che hai assegnato "6" a "y" e "5+y" a "x", "x" sarà sempre "5+y", e quindi "5 + 6" (nello scope corrente). Quindi ogni volta che appare la variabile "x" sarà sostituita (come dici tu) con l'espressione equivalente.
"hamming_burst":
[quote="Kashaman"]Mhh, quindi diciamo che l'unica definizione plausibile generale di variabile sia "locazione di memoria",
No.
Nei linguaggi RAM basati sul concetto di Memoria, si ha la definizione di identificatore. Fissiamo che una variabile ha associato un indirizzo di una locazione di memoria, ed è il contenuto di questa locazione che varia.
Un identificatore è un elemento di un insieme chiamata Ambiente (diciamo un insieme di lettere dell'alfabeto) a cui si può associare una locazione di memoria (un indirizzo).
Una locazione tipizzata (un sottoinsieme finito della memoria), ha salvato in esso una valore (se hai fatto un po' di architettura saprai il concetto di indirizzamento indiretto).[/quote] no a dire il vero,sono uno studente di matematica e di architettura di sistemi non ho fatto nulla. A dire il vero , ne so poco.
Diciamo che per architettura, so solo un poco come è strutturata la macchina di Von Neumann.
ho capito.
Per far corrispondere un identificatore (di un ambiente) con una locazione, ed una locazione (di una memoria) con un valore, esiste il concetto di aggiornamento di memoria che lega l'ambiente con la memoria. Diciamo uno strato che gestisce e collega i valori con gli identificatori di un programma utente, cioè il sistema operativo.
"claudio86":
non c'è il concetto di assegnamento ma solo di uguaglianza
nì.
Nei funzionali parlare di uguaglianza bisogna stare attenti. Anche qui dipende dal linguaggio, ma in generale si parla più di operazione di sostituzione.
diciamo allora, che nei linguaggi funzionali, in generale, una volta assegnato alla var un valore, questo non può essere più modificato dal programma stesso,diventa in un certo senso "costante. Domanda: a questa schiera di linguaggi mica ci appartiene il PROLOG o l'ALGOL?
grazie a entrambi, siete sempre molto esaustivi.
"claudio86":
Non saprei se un array si possa definire un tipo strutturato o se possa essere considerato un tipo primitivo.
direi un tipo strutturato banale, cioè composto da un solo tipo primitivo oppure anche strutturato.
"Kashaman":
Diciamo che per architettura, so solo un poco come è strutturata la macchina di Von Neumann.
quella del mostro von Neumann è proprio la macchina RAM su cui si basano i linguaggi IMP con locazioni, ... (o più complessi).
diciamo allora, che nei linguaggi funzionali, in generale, una volta assegnato alla var un valore, questo non può essere più modificato dal programma stesso,diventa in un certo senso "costante
no io ho parlato imporpriamente di costante, per farti un paragone di modello.
Teoricamente una costante è una variabile con un valore fisso che viene salvato nell'Ambiente senza passare per la memoria (in realtà risiede in memoria ed ha una locazione ma è un altro discorso). Solo in questo c'è corrispondenza tra una variabile in FUN (function=linguaggio funzionale) ed una costante in IMP (imperative=linguaggio imperativo), cioè che esiste solo il concetto di ambiente e solo questo viene aggiornato e modificato.
Domanda: a questa schiera di linguaggi mica ci appartiene il PROLOG o l'ALGOL?
ALGOL fa parte degli IMP mi pare che fu uno dei progenitori del paradigma imperativo. PROLOG di una particolare classe di programmazione logica.
Se di Prolog se ne utilizzano ancore le caratteristiche semantiche e sintattiche direttamente, di ALGOL direi che oramai è storia (anche se ha una particolarità unica che si cita ancora).