In passato LISP era l'unico potente linguaggio di programmazione funzionale, per quanto ho capito. Ora ce ne sono molte, perché la gente usa ancora LISP con la sua sintassi strana? Esiste una caratteristica killer unica nel suo genere?Perché usare LISP oggi, quando ci sono Scala, Erlang, Haskell, ecc.
risposta
In primo luogo, Lisp in generale e Common Lisp in particolare è più "multi-paradigma" che "funzionale". Da qui in poi, parlerò principalmente di Common Lisp (CL).
Non c'è "una caratteristica killer", però. CL è un linguaggio di programmazione programmabile, che semplifica la metaprogrammazione. Cioè, puoi solitamente fare cose "meta-livello" direttamente nella lingua invece di dover raggiungere un pre-processore che trasformi il testo nella tua lingua di base.
CL ha anche un potente sottosistema oggetto (CLOS), che ha, fino ad ora, sostenuto tutto quello che ho voluto fare con le gerarchie e/o metodi di classe.
Per quanto riguarda la sintassi, suppongo che sia un po 'diverso dalla più classica sintassi dei linguaggi della "famiglia Algol", ma non è più e forse meno strano di APL.
C'è una caratteristica killer unica. Si chiama un macrosistema. Con i macro puoi espandere la tua lingua e rende davvero facile creare ottimi DSL. Questo tipo di cose sarebbe difficile (e non così bello) da implementare con Scala, Erlang o Haskell.
La sintassi o la mancanza di essa è ciò che molti lispers piace molto perché porta una grande uniformità, che è qualcosa che manca in molte lingue. Per un programmatore C o Java standard, la sintassi di Erlang o Haskell è strana, quindi quello che è peggio della sintassi è che sembra strano.
Un'altra domanda a cui dovresti rispondere è perché le altre lingue sono meglio di Lisp, a quale caratteristica manca Lisp?
Ma è naturalmente il caso che molte lingue moderne imparare molto da Lisp e ci sono molte altre lingue che possono essere utilizzati per lo stesso problema.
Non dimenticare che Lisp non è una lingua, esistono diversi tipi di dialoghi Lisp. Scheme, Common Lisp o Clojure e tutti hanno diversi focus.
Quindi la domanda su quale linguaggio utilizzare può essere risolta solo provandoli ognuno ha qualcosa di speciale su di essi. Erlang con gli attori, Haskell e Scala hanno questi typesystems folli, Lisps hanno macro-sistemi impressionante .....
C'è Lisp Flavored Erlang (LFE) che fornisce una sintassi chiara che porta le macro a Erlang. – boring
- 1. Quante istruzioni ci sono su x86 oggi?
- 2. Perché hai deciso di "contro" usare Erlang?
- 3. Perché ci sono file duplicati quando si estrae l'archivio tar.gz
- 4. Quanti impliciti ci sono in Scala?
- 5. Lisp Flavored Erlang - Messaging primitive
- 6. TaskCompletionSource: Quando usare SetResult() contro TrySetResult(), ecc
- 7. Quando usare '(o quotare) in Lisp?
- 8. Perché non ci sono ObservableQueues in JavaFX?
- 9. Quali spazi dei nomi simbolo ci sono in Haskell?
- 10. Perché non ci sono molte discussioni sulla co- e contro-varianza in Haskell (al contrario di Scala o C#)?
- 11. Quando usare la monade ST in Scala?
- 12. perché ci sono più fcntl.h in linux?
- 13. Python (o programmazione generale). Perché usare <> invece di! = E ci sono dei rischi?
- 14. Se ci sono "problemi noti" perché rilasciare?
- 15. transazioni e code distribuite, ruby, erlang, scala
- 16. Perché sono le espressioni disapprovate in Haskell?
- 17. Ci sono dei buoni benchmark Clojure?
- 18. Ci sono cose che Elixir può fare che Erlang non può, o viceversa?
- 19. Perché ci sono overhead che chiamano le funzioni Haskell da C?
- 20. Perché non ci sono funzioni di accesso "generali" per le tuple in Haskell?
- 21. Come sono le prestazioni quando ci sono centinaia di Task.Delay
- 22. Quando dovresti usare === vs ==,! == vs! =, Ecc. In javascript?
- 23. Ci sono ragioni per non usare lombok con Android Studio
- 24. Cosa fa `mailto:` quando non ci sono client email?
- 25. Perché ci sono due serie di argomenti/parentesi in questa definizione del metodo Scala?
- 26. Quando usare isInstanceOf e quando usare un'istruzione match-case (in Scala)?
- 27. App Engine: perché ci sono classi PhoneNumber, Link, Rating etc?
- 28. Perché non ci sono parole chiave di concorrenza in Kotlin?
- 29. Perché ci sono 4 versioni di Node JS?
- 30. Perché molti progetti software falliscono oggi?
Al giorno d'oggi, le persone utilizzano Lisp, non LISP. I dialetti più utilizzati sono Common Lisp, Scheme e Clojure. – Svante
Aspetta, lo stai confrontando con Scala, Erlang, Haskell e pensi che * Lisp * abbia una "sintassi strana"? :-) – Ken
Anche se la sintassi Lisp può essere insolita se provieni da uno sfondo di tipo "C'è", in realtà ha la sintassi più regolare di qualsiasi lingua che abbia mai visto. C, Java, ecc. Hanno tutti un'ampia varietà di regole di sintassi per tutto ciò che è conveniente al momento, in Lisp la sintassi è l'AST (essenzialmente), quindi è incredibilmente regolare. – asm