Esistono lingue in cui l'ambito è definito in modo tale che non si estenda alle funzioni incluse? In altre parole, c'è un linguaggio in cui un codice come il seguente (sintassi Python-like):Esistono linguaggi di programmazione senza variabili globali?
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
darebbe un errore perché x non è definito all'interno della funzione fact
?
In generale, ci sono lingue in cui l'ambito della funzione di qualsiasi non include le funzioni definite all'interno di esso?
Modifica: Grazie per i commenti informativi. La ragione per cui ho pensato di questo è che la situazione di una funzione interna avendo accesso a tutti l'ambiente fornito dalla sue funzioni contenenti suona sospettosamente vicino a me alla situazione descritta da Joe Armstrong nel suo argument against OOP:
Perché il problema con lingue orientate agli oggetti è che hanno ottenuto tutto questo ambiente implicito che portano con loro. Tu volevi una banana, ma quello che hai ottenuto era un gorilla con in mano la banana e l'intera giungla .
anche rilevante è che sento che la lingua Newspeak non ha alcuna namespace globale, anche se non ho idea di come funziona.
Posso immaginare che il problema, sollevato nel commento di Brian di seguito, delle funzioni incorporate (funzioni importate da __builtins__
in Pythonspeak o Sistema in molte altre lingue) sia introdotto artificialmente dall'interprete/compilatore in ogni funzione. Dopo tutto sono quasi sempre trattati in modo speciale nella lingua in primo luogo. Un'altra opzione è quella di averli come metodi di un oggetto passato come parametro alla funzione o importati come modulo dall'interno.
Cosa comporterebbe? – Blindy
Si noti che anche 'print',' reduce' e 'xrange' sembrano identificatori risolti da un ambito esterno. Il che dimostra perché questo è raramente utile. – Brian