So che sono dialetti della stessa famiglia linguistica chiamata lisp, ma quali sono esattamente le differenze? Potresti fornire una panoramica, se possibile, su argomenti come sintassi, caratteristiche, funzionalità e risorse.
So che sono dialetti della stessa famiglia linguistica chiamata lisp, ma quali sono esattamente le differenze? Potresti fornire una panoramica, se possibile, su argomenti come sintassi, caratteristiche, funzionalità e risorse.
Risposte:
Hanno tutti molto in comune:
(function-name arg1 arg2)
Caratteristiche distintive comuni del Lisp:
Caratteristiche distintive di Clojure:
[]
e mappe {}
usati come standard in aggiunta agli elenchi standard ()
- oltre all'utilità generale di vettori e mappe alcuni ritengono che questa sia un'innovazione che rende generalmente più leggibileCaratteristiche distintive dello schema:
Le persone sopra hanno perso alcune cose
Common Lisp ha anche vettori e tabelle hash. La differenza è che Common Lisp usa # () per i vettori e nessuna sintassi per le tabelle hash. Lo schema ha vettori, credo
Common Lisp ha macro di lettura, che ti permettono di usare nuove parentesi (come fa Racket, un discendente di Scheme).
Scheme e Clojure hanno macro igieniche, a differenza di quelle antigieniche Common Lisp
Tutte le lingue sono moderne o hanno ampi progetti di ristrutturazione. Common Lisp ha ottenuto vaste librerie negli ultimi cinque anni (grazie soprattutto a Quicklisp), Scheme ha alcune implementazioni moderne (Racket, Chicken, Chez Scheme, ecc.) E Clojure è stato creato relativamente di recente
Common Lisp ha un sistema OO integrato, sebbene sia abbastanza diverso dagli altri sistemi OO che potresti aver usato. In particolare, non viene applicato: non è necessario scrivere codice OO.
Le lingue hanno filosofie di progettazione un po 'diverse. Scheme è stato concepito come un dialetto minimo per la comprensione del modello attore; successivamente è stato utilizzato per la pedagogia. Common Lisp è stato progettato per unificare la miriade di dialetti Lisp che erano sorti. Clojure è stato progettato per la concorrenza. Di conseguenza, Scheme ha la reputazione di essere minimale ed elegante, Common Lisp di essere potente e paradigma-agnostico (funzionale, OO, qualunque cosa) e Clojure di favorire la programmazione funzionale.
Non dimenticare le differenze tra Lisp-1 e Lisp-2.
Scheme e Clojure sono Lisp-1:
Ciò significa che sia i nomi delle variabili che quelli delle funzioni risiedono nello stesso spazio dei nomi.
Common Lisp è Lisp-2:
funzione e variabili hanno spazi dei nomi diversi (infatti, CL ha molti spazi dei nomi).
Gimp è scritto in Scheme :)
In effetti, la quantità di software che alcune persone pensano potrebbe essere scritta in C ++ è stata probabilmente fatta sotto l'ombrello Lisp, è difficile scegliere le mele d'oro dal mazzo. Il fatto è che il C ++ non è sempre stato popolare, sembra essere popolare solo oggi a causa di una cronologia di aggiornamenti. Per la metà minore del secolo il C ++ non utilizzava nemmeno il multithreading, era dove Python è oggi un pozzo nero di inutile codice colla buggy non testato. Più veloce un po 'e ora stiamo assistendo a un aumento della programmazione funzionale, è più come adattarsi o morire. Penso che Java abbia ragione per quanto riguarda la parte di adattamento.
Scheme è stato progettato per semplificare il linguaggio Lisp, questo era il suo unico intento tranne che non ha mai preso piede. Penso che Clojure faccia qualcosa di simile, inteso a semplificare nient'altro che Scheme per la JVM. È proprio come ogni altro linguaggio JVM solo per aumentare l'esperienza dell'utente, solo per semplificare la scrittura del boilerplate in Java.