Domanda

Sento davvero che dovrei imparare Lisp e ci sono molte buone risorse là fuori per aiutarmi a farlo.

Non sono scoraggiato dalla complicata sintassi, ma dove troverei nella "programmazione commerciale tradizionale" luoghi in cui avrebbe senso usarlo al posto di un linguaggio procedurale.

Esiste una killer-app commerciale là fuori scritta in Lisp?

È stato utile?

Soluzione

Uno degli usi principali del Lisp è nell'intelligenza artificiale.Un mio amico al college ha seguito un corso di intelligenza artificiale e per il suo progetto principale ha scritto un "Luci spente" risolutore in Lisp.Versioni multiple del suo programma utilizzavano routine AI leggermente diverse e i test su circa 40 computer hanno prodotto risultati piuttosto accurati (vorrei che fosse online da qualche parte a cui collegarmi, ma non credo che lo sia).

Due semestri fa ho usato Scheme (un linguaggio basato su Lisp) per scrivere un programma interattivo che simulasse la routine "Who's on First" di Abbott e Costello.L'input dell'utente è stato confrontato con alcune strutture dati piuttosto complicate (simili a mappe in altre lingue, ma molto più flessibili) per scegliere quale sarebbe stata la risposta appropriata.Ho anche scritto una routine per risolvere un 3x3 puzzle scorrevole (un algoritmo che potrebbe essere facilmente esteso a puzzle a scorrimento più grandi).

In sintesi, l’apprendimento del Lisp (o Scheme) potrebbe non produrre molte applicazioni pratiche oltre all’intelligenza artificiale, ma è un’esperienza di apprendimento estremamente preziosa, come molti altri hanno affermato.Programmare in un linguaggio funzionale come il Lisp ti aiuterà anche a pensare in modo ricorsivo (se hai avuto problemi con la ricorsione in altri linguaggi, questo potrebbe essere di grande aiuto).

Altri suggerimenti

Lisp è un linguaggio ampio e complesso con un runtime ampio e complesso per supportarlo.Per questo motivo, Lisp è più adatto a problemi grandi e complicati.

Ora, a complesso il problema non è lo stesso di a complicato uno.UN complesso il problema è uno con molti piccoli dettagli, ma che non è difficile.Scrivere un sistema di prenotazione aerea è un'attività complessa, ma con abbastanza soldi e programmatori non è difficile.Ottieni la differenza?

Un problema complicato è quello che è contorto, quello in cui il tradizionale divide et impera non funziona.Controllare un robot o lavorare con dati non tabulari (ad esempio le lingue) o situazioni altamente dinamiche.

Lisp si adatta davvero bene a problemi dove la soluzione deve essere espandibile;l'esempio classico è l'editor di testo emacs.È completamente programmabile e quindi un ambiente di programmazione a sé stante.

Nel suo famoso libro PAIP, Norvig afferma che Lisp è l'ideale per la programmazione esplorativa.Cioè programmare la soluzione ad un problema non pienamente compreso (a differenza di un sistema di prenotazione on-line).In altre parole:Problemi complicati.

Inoltre, imparare il Lisp ti ricorderà qualcosa di fondamentale che è stato dimenticato:La differenza tra Von Neumann e Turing.Come sappiamo, il modello di calcolo di Turing è un modello teorico interessante, ma inutile come modello per la progettazione di computer.Von Neumann, d'altro canto, progettò un modello di come i computer e il calcolo dovevano essere eseguiti:Il modello di Von Neumann.Fondamentale nel modello di Von Neumann è che hai una sola memoria e lì memorizzi sia il tuo codice che i tuoi dati.Nota attentamente che un programma Java (o C#, o qualunque cosa tu voglia) è una manifestazione del modello di Turing.Stabilisci il tuo programma in concreto, una volta per tutte.Quindi speri di poter gestire tutti i dati che vengono lanciati su di esso.

Lisp mantiene il modello di Von Neuman;non esiste un confine netto e predeterminato tra codice e dati.La programmazione in Lisp apre la tua mente alla potenza del modello di Von Neumann.La programmazione in Lisp ti fa vedere i vecchi concetti sotto una nuova luce.

Infine, essendo interattivo, imparerai a interagire con i tuoi programmi mentre li sviluppi (invece di compilarli ed eseguirli).Ciò cambia anche il modo in cui programmi e il modo in cui visualizzi la programmazione.

Con questa introduzione posso finalmente offrire una risposta alla tua domanda:Troverai luoghi in cui supera le lingue "tradizionali"?

Se sei un programmatore avanzato, hai bisogno di strumenti avanzati.E non esiste strumento più avanzato di Lisp.O, in altre parole:La risposta è sì se i tuoi problemi sono difficili.Non altrimenti.

In risposta a @lassevk:

alt text

sintassi complicata??

La sintassi per lisp è incredibilmente semplice.

App killer scritta in lisp: emacs.Lisp ti permetterà di estendere emacs a piacimento per fare quasi tutto ciò che puoi pensare che un editor potrebbe fare.

Ma, dovresti imparare il lisp solo se tu Volere e potresti non riuscire mai a usarlo al lavoro, ma è comunque fantastico.

Inoltre, voglio aggiungere:anche se trovi posti in cui lisp ha senso, probabilmente non convincerai nessun altro che dovrebbe essere usato su Java, C++, C#, Python, Ruby, ecc.

Non posso rispondere per esperienza diretta ma dovresti leggere cosa Paolo Graham ha scritto su Lisp.Per quanto riguarda la parte "killer-app", leggi Battere le medie.

Ho programmato in Lisp professionalmente per circa un anno e vale sicuramente la pena impararlo.Avrai l'impareggiabile opportunità di rimuovere la ridondanza dal tuo codice, potendo sostituire tutto il codice standard con funzioni ove possibile e macro dove no.Potrai inoltre accedere a una flessibilità senza pari in fase di runtime, traducendo liberamente tra codice e dati.Pertanto, le situazioni in cui le azioni dell'utente possono innescare la necessità di costruire strutture complesse in modo dinamico sono quelle in cui Lisp brilla davvero.I programmi di pianificazione dei voli delle compagnie aeree più diffusi sono scritti in Lisp e in Lisp sono presenti anche molti CAD/CAM.

Lisp è molto utile per creare piccoli DSL.Ho una copia di Lisp in a Box in esecuzione al lavoro e ho scritto piccoli DSL per interrogare i database del server SQL e generare livelli di dati, ecc. in C#.Tutto il mio codice boiler plate è ora scritto in macro lisp che vengono emesse in C#.Genero HTML, XML e ogni genere di cose con esso.Anche se vorrei poter usare Lisp per la codifica quotidiana, Lisp può portare vantaggi pratici.

Se ti piace programmare dovresti imparare Lisp per il puro piacere di farlo. XKCD esprime perfettamente l'illuminazione intellettuale che ne consegue.Imparare il Lisp è per il programmatore ciò che la meditazione è per il monaco buddista (e lo intendevo senza alcuna connotazione blasfema).

Qualsiasi lingua sembra molto più difficile quando non si utilizzano le comuni convenzioni di indentazione di una lingua.Quando si seguono quelli del Lisp, si vede come esprime abbastanza facilmente una struttura ad albero della sintassi (nota, questo non è del tutto corretto perché l'anteprima mente un po';le r dovrebbero allinearsi con fns nell'argomento ricorsivo Quicksort):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

Ho scoperto che imparare una nuova lingua influenza sempre il tuo stile di programmazione nelle lingue che già conosci.Per me mi ha sempre fatto pensare in modi diversi per risolvere un problema nella mia lingua principale, che è Java.Penso che in generale allarghi i tuoi orizzonti in termini di programmazione.

Ho seguito un "corso di lisp" al college negli anni ottanta.Nonostante abbia groccato tutti i concetti presentati in classe, sono rimasto senza Qualunque apprezzamento per ciò che rende grande il lisp.Temo che molte persone considerino il lisp semplicemente come un altro linguaggio di programmazione, che è ciò che quel corso al college ha fatto per me tanti anni fa.Se vedi qualcuno che si lamenta della sintassi del lisp (o della sua mancanza), c'è una buona probabilità che sia una di quelle persone che non sono riuscite a cogliere la grandezza del lisp.Sono stata una di quelle persone per molto tempo.

È stato solo due decenni dopo, quando ho riacceso il mio interesse per il lisp, che ho cominciato a "capire" ciò che rende il lisp interessante, almeno per me.Se riesci a imparare il lisp senza rimanere sbalordito dalle chiusure e dalle macro lisp, probabilmente non hai colto il punto.

L'apprendimento di LISP/Scheme potrebbe non offrirti maggiore spazio applicativo, ma ti aiuterà a comprendere meglio la programmazione funzionale, le sue regole e le sue eccezioni.

Vale la pena investire tempo solo per apprendere la differenza tra la bellezza di sei funzioni pure annidate e l'incubo di sei funzioni annidate con effetti collaterali.

Da http://www.gigamonkeys.com/book/introduction-why-lisp.html

Uno dei miti più comunemente ripetuti di Lisp è che è "morto". Sebbene sia vero che LISP comune non è così usato come, diciamo, Visual Basic o Java, sembra strano descrivere una lingua che continua ad essere utilizzata per un nuovo sviluppo e che continua ad attirare nuovi utenti come "morti". Alcune recenti storie di successo LISP includono Viaweb di Paul Graham, che divenne Yahoo Store quando Yahoo acquistò la sua compagnia;I prezzi aerei e il sistema di shopping di tariffa del software ITA, QPX, utilizzato dal venditore di biglietti online Orbitz e altri;Naughty Dog's Game per PlayStation 2, Jak e Daxter, che è in gran parte scritto in un dialetto Lisp specifico per il dominio Naughty Dog inventato chiamato Goal, il cui compilatore è di per sé scritto in comune Lisp;e The Roomba, l'aspirapolvere robotico autonomo, il cui software è scritto in L, un sottoinsieme di LISP comune.Forse ancora più significativo è la crescita del sito Web Common Lisp.net, che ospita progetti LISP comuni open source e il numero di gruppi di utenti LISP locali che sono sorti negli ultimi due anni.

"Vale la pena imparare il Lisp per la profonda esperienza di illuminazione che avrai quando finalmente lo otterrai;quell'esperienza ti renderà un programmatore migliore per il resto dei tuoi giorni, anche se in realtà non utilizzerai mai molto il Lisp stesso."

--Eric S.Raymond, "Come diventare un hacker"

http://www.paulgraham.com/avg.html

Sono d'accordo che Lisp è uno di quei linguaggi che potresti non usare mai in un contesto commerciale.Ma anche se non ci riuscissi, impararlo amplierà sicuramente la tua comprensione della programmazione nel suo insieme.Ad esempio, ho imparato Prolog al college e, anche se non l'ho mai più usato, mi ha dato una maggiore comprensione di molti concetti di programmazione e (a volte) un maggiore apprezzamento per i linguaggi che utilizzo.

Ma se hai intenzione di impararlo... leggi assolutamente Su Lisp

Ok, potrei essere strano, ma in realtà non mi piacciono molto i saggi di Paul Graham e su Lisp è un libro davvero difficile se non hai già una conoscenza del Common Lisp.Invece, direi di scegliere Siebel's Lisp comune pratico.Per quanto riguarda le "killer-app", Common Lisp sembra trovare il suo posto in negozi di nicchia, come ITA, quindi anche se non esiste un'app sinonimo di CL come Rails lo è per Ruby, ci sono posti nell'industria che la usano se fai un po' di ricerche.

Se devi chiederti se dovresti imparare il lisp, probabilmente non ne hai bisogno.

Imparare il lisp metterà Javascript sotto una luce completamente diversa!Lisp ti costringe davvero a cogliere sia la ricorsione che l'intero paradigma delle "funzioni come oggetti di prima classe".Vedi l'eccellente articolo di Crockford su Schema vs Javascript.Javascript è forse il linguaggio più importante oggi in circolazione, quindi capirlo meglio è immensamente utile!

Lo Script-Fu di Gimp è labiale.È un'app killer di Photoshop.

Sintassi complicata?La bellezza di lisp è che ha una sintassi ridicolmente semplice.È semplicemente una lista, in cui ogni elemento della lista può essere un altro elenco o un tipo di dati elementare.

Vale la pena impararlo perché migliora la tua capacità di codifica di pensare e utilizzare le funzioni come un altro tipo di dati.Ciò migliorerà il modo in cui codifichi in un linguaggio imperativo e/o orientato agli oggetti perché ti consentirà di essere più flessibile mentalmente riguardo al modo in cui è strutturato il tuo codice.

Per aggiungere alle altre risposte:

Perché il SICP corso (i video sono disponibili Qui) è fantastico:ti insegna Lisp e molto di più!

Applicazione assassina? Franz Inc. ha un lungo elenco di storie di successo, ma questo elenco include solo gli utenti di AllegroCL...Probabilmente ce ne sono altri.Il mio preferito è la storia di Naughty Dog, dato che ero un grande fan dei giochi Crash Bandicoot.

Per imparare Common Lisp, lo consiglierei Lisp comune pratico.Ha un approccio pratico che, almeno per me, lo ha reso più semplice rispetto ad altri libri che ho letto.

Potresti usare Clojure today per scrivere test e script sulla Java VM.Sebbene ci siano altri linguaggi Lisp implementati sulla JVM, penso che Clojure faccia il miglior lavoro di integrazione con Java.

Ci sono momenti in cui il linguaggio Java stesso ostacola la scrittura di test per il codice Java (inclusa la "programmazione commerciale tradizionale").(Non lo dico come un atto d'accusa nei confronti di Java - altri linguaggi soffrono dello stesso problema - ma è un dato di fatto.Poiché l'argomento, non Java, non approfondirò.Sentitevi liberi di iniziare un nuovo argomento se qualcuno vuole discuterne.) Clojure elimina molti di questi ostacoli.

Lisp può essere utilizzato ovunque si utilizzi la programmazione tradizionale.Non è così diverso, è solo più potente.Scrivere un'app Web?puoi farlo su Lisp, scrivendo un'applicazione desktop?puoi farlo su Lisp, qualunque cosa, probabilmente puoi farlo su Lisp, o Python, o qualsiasi altra programmazione generica (ci sono alcuni linguaggi adatti per una sola attività).

L’ostacolo più grande sarà probabilmente l’accettazione del tuo capo, dei tuoi colleghi o dei tuoi clienti.È qualcosa su cui dovrai lavorare con loro.Scegliere una soluzione pragmatica come Clojure che può sfruttare l'attuale base di installazione dell'infrastruttura Java, dalla JVM alle librerie, potrebbe aiutarti.Inoltre, se si dispone di un programma Java, è possibile creare un'architettura plug-in e scrivere plug-in Clojure per essa e finire per scrivere metà del codice in Clojure.

Non è un motivo ma (banale) AutoCAD ha il supporto runtime LISP e DCL.È un modo pratico per scrivere macro complesse (inclusa l'automazione ActiveX) se non si desidera utilizzare VBA o i relativi SDK C++ o .NET o se un'espressione DIESEL non è sufficiente.

Molte delle funzioni di AutoCAD sono in realtà routine LISP.

Questo è un argomento su cui ho riflettuto per un po' ma non sono ancora giunto a una decisione, come al solito il tempo è il problema principale...;)

E poiché non riesco a trovare questi collegamenti fino ad ora in questo post, li aggiungo per interesse pubblico:

Storia di successo e fallimento:Lisping al JPL

Una storia di successo davvero impressionante:Lisp in uso presso la società Orbitz

Confronto e analisi sull'opportunità di utilizzare Lisp anziché Java:Lisp come alternativa a Java

La sintassi è irrilevante, la leggibilità no!

Non sto dicendo che questa sia un'app killer, ma sembra che potrebbe essere interessantehttp://code.google.com/p/plop/

Applicazione assassina?Il motore di ricerca voli di ITA Software è uno di questi.

Per quanto riguarda il "perché", molto probabilmente ti renderà uno sviluppatore migliore ed è estremamente improbabile che ti renda uno sviluppatore peggiore.Potrebbe, tuttavia, farti preferire i dialetti lisp ad altre lingue.

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