Domanda

Come mai la maggior parte delle Lisps e schemi vengono dinamicamente tipizzati? Non tipizzazione statica non mescolare con alcune delle loro caratteristiche comuni?

È stato utile?

Soluzione

Typing e s-espressioni possono essere fatti per lavorare insieme, vedere digitato schema .

In parte si tratta di una coincidenza storica che le lingue s-espressione vengono digitati in modo dinamico. Questi linguaggi tendono a fare affidamento più pesantemente su Macro , e la facilità di analisi e di pattern-matching su S-espressioni rende l'elaborazione di macro molto più facile. La maggior parte della ricerca sulle macro sofisticate accade in lingue s-espressione.

tipizzati igienico macro sono difficili.

Altri suggerimenti

Quando Lisp è stato inventato negli anni 1958-1960 ha introdotto un sacco di funzioni sia come una lingua e un'implementazione (raccolta dei rifiuti, un compilatore self-hosting, ...). Alcune caratteristiche sono state ereditate (con alcuni miglioramenti) da altre lingue (elaborazione lista, ...). Il linguaggio implementato calcolo con le funzioni. L'S-espressioni erano più un dettaglio di implementazione (a quel tempo), che una caratteristica del linguaggio. Un sistema di tipo non faceva parte del linguaggio. Usando il linguaggio in modo interattivo è stato anche una funzione di rapida attuazione.

I sistemi di tipo utili per linguaggi funzionali non erano ancora inventato in quel momento. Ancora fino ad oggi è anche relativamente difficile da usare lingue staticamente tipizzati in modo interattivo. Ci sono molte implementazioni di linguaggi staticamente tipizzati che forniscono anche una certa interfaccia interattiva - ma soprattutto non offrono lo stesso livello di sostegno di un uso interattivo come un tipico sistema Lisp. Programmazione in un interattivo mezzo di sistema Lisp che molte cose possono essere cambiate al volo e che potrebbe essere problematico se di tipo modifiche dovevano essere propagato attraverso programmi integrali e dati in un tale sistema Lisp interattivo. Si noti che alcuni Intriganti hanno una visione diversa su queste cose. R6RS è per lo più un linguaggio batch in genere non più di tanto nello spirito di Lisp ...

I linguaggi funzionali che ha ottenuto inventato più tardi con sistemi di tipo statico, allora anche avuto una sintassi non-s-espressione - hanno fatto non offre il supporto per le macro o funzioni correlate. poi alcune di queste lingue / implementazioni utilizzato un preprocessore per le estensioni sintattiche.

digitazione

statica è lessicale, significa che tutte le informazioni sui tipi di può essere dedotta dalla lettura di codice sorgente senza valutare qualsiasi espressione o di calcolo qualsiasi cose, i condizionali essendo più importante qui. Un linguaggio a tipizzazione statica è progettato in modo che questo possa accadere, un termine migliore sarebbe 'lessicale digitato', come in, un compilatore in grado di dimostrare dalla lettura della fonte da solo che non si verifichino errori di tipo.

Nel caso di Lisp, questo è goffamente diverso perché il codice sorgente di Lisp per sé non è statica, Lisp è homo-iconica, utilizza dati come codice e può in certa misura modificare dinamicamente la propria fonte di esecuzione.

Lisp era la lingua prima dinamicamente tipizzati, e probabilmente per questo motivo, il codice del programma in sé non è più lessicale in Lisp.

Edit: una molto più potente ragione, nel caso di tipizzazione statica dovreste digitare liste. O si può avere tipi estremamente complesse per ogni liste che rappresentano tutti gli elementi, la domanda che ogni elemento ha lo stesso tipo e digitare come una lista di che. La prima opzione produrrà l'inferno con gli elenchi di liste. La seconda opzione richiede che il codice sorgente contiene solo lo stesso tipo per ogni dato, ciò significa che non si può anche costruire espressioni come una lista è comunque un tipo diverso da un numero intero.

Quindi, oserei dire che è completamente e assolutamente fattibile per realizzare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top