2009-07-10 10 views
7

Ecco la storia precedente saltare in fondo se non ti interessa e vuoi solo vedere la domanda.Domanda newbie su Lisp e Packages

Quindi ho giocato un po 'in LISP. Alcune funzioni di base, alcune classi e file IO. Quando mi sono imbattuto in questo articolo:

http://www.adampetersen.se/articles/lispweb.htm

E sono entusiasta di provare e utilizzare lisp per un'applicazione web. Vado a scaricare i pacchetti, ma per la vita di me non so come caricarli nel mio IDE Allegro.

Hmm ... ok, il sito di hunchentoot dice che molti dei pacchetti di base sono in LispWorks. Quindi lo scarico. Ancora non sono sicuro di come ottenere la fonte per i pacchetti che ho scaricato in questi IDE. Sembrano avere binari dei pacchetti?

Vabbè interruttore forse malato al mio server Ubuntu e apt-get tutti i pacchetti e configurazione melma (non ho usato prima perché volevo solo imparare Lisp. Apprendimento emacs e Lisp, allo stesso tempo sembrava reale scoraggiante) . Sono in grado di ottenere tutti i pacchetti necessari e caricare la melma e ancora lo stesso problema non sono disponibili.

Scavo ancora un po 'e vedo questo programma chiamato ASDF. Sembra che ASDF sia una sorta di costruttore di pacchetti per il lisp? Non lo so, sembra confusionario. Sto per arrendermi a questo punto.


Se stai ancora leggendo questo, ecco la mia domanda.
1. Come caricare l'origine per questi pacchetti nel mio ambiente Lisp. tentare di imparare la chiarezza non è stato troppo difficile, ma le informazioni sugli ambienti sono state scarse. Devo compilare i pacchetti che ho scaricato con ASDF.
2. C'è un modo semplice per qualcuno di alzarsi e correre in folle senza dover accelerare una grande quantità di tempo imparando in anticipo tutti gli strumenti?

risposta

8

Hmm ... ok, bene il sito hunchentoot dice un sacco di pacchetti di base sono in LispWorks. Quindi lo scarico.

Ciò significa semplicemente che l'autore ha scritto molto codice specifico di Lispworks in Hunchentoot. Ciò non significa che Hunchentoot funzioni solo su Lispworks.

Ancora non si sa come ottenere la fonte per i pacchetti che ho scaricato in questi IDE.

È necessario utilizzare ASDF.

Sembra che abbiano i file binari dei pacchetti?

Questo è improbabile.

Vabbè interruttore forse malato al mio server Ubuntu e tutti i pacchetti e installazione di melma> (non ho usato prima perché volevo solo imparare Lisp. Emacs apprendimento apt-get e Lisp allo stesso tempo sembrava davvero scoraggiante).

Non farlo allora. Non è necessario usare Emacs o Slime.

Sono in grado di ottenere tutti i pacchetti necessari e caricare la melma e ancora lo stesso problema non ci sono disponibili.

Per risultati rapidi provare clbuild: http://common-lisp.net/project/clbuild/

scavo intorno un po 'e vedere questo programma chiamato ASDF. Sembra che ASDF sia un po 'il tipo di costruttore di pacchetti per lisp? Non lo so, sembra confusionario.

ASDF è un po 'come un Makefile per applicazioni Common Lisp.

Ho intenzione di mollare a questo punto.

Questa è la cosa peggiore che si possa fare (in questo o in qualsiasi altro punto). Sono contento che tu abbia deciso di pubblicare qui i tuoi problemi.

  1. Come faccio a caricare la fonte di questi pacchetti nel mio ambiente Lisp. provare a imparare il lisp non è stato troppo difficile ma le informazioni sugli ambienti sono state sparse. Devo compilare i pacchetti che ho scaricato con ASDF.

clbuild dovrebbe darvi tutto ciò che serve, ma qui ci sono alcuni suggerimenti se non si desidera utilizzarlo:

  1. CLISP, SBCL: ASDF fa parte del vostro Lisp. Esegui (require :asdf). Lispworks, Allegro: devi scaricare e caricare ASDF. Salva asdf.lisp da qualche parte, quindi esegui (load "/path/to/asdf.lisp").
  2. Per ogni libreria/applicazione ("sistema" in linguaggio ASDF) è necessario scaricare e decomprimerlo in qualche luogo. Ripeti fino a quando tutte le dipendenze sono soddisfatte. Annotare questi luoghi (directory).
  3. Per ogni luogo del passaggio n. 2 aggiungere il posto al registro ASDF: (push "/path/to/dir/" asdf:*central-registry*). Non dimenticare la barra finale.
  4. Caricare il sistema utilizzando (asdf:oos 'asdf:load-op :system-name).
  1. Esiste un modo semplice per qualcuno solo alzarsi e correre in Lisp senza dover accelerare una grande quantità di tempo in anticipo l'apprendimento di tutti gli strumenti?

Vedere sopra: utilizzare clbuild.

+1

Il passaggio 4 ora può essere (asdf: load-sys: nome-sistema). – Svante

6

Il modo più veloce in Ubuntu è utilizzare i pacchetti inclusi in quella distribuzione. È "ok" se vuoi semplicemente provare alcune cose, ma queste versioni sono spesso relativamente vecchie. Vorrei raccomandare i pacchetti sbcl e slime. Se non conosci ancora emacs, puoi farlo abbastanza velocemente attraverso il suo tutorial integrato (C-h t (premi Control-h, rilascia, quindi premi t)).

È quindi possibile avviare emacs, avviare la melma (tramite M-x slime), aprire un file lisp (C-x C-f ~/lisp/first-try.lisp) e si è pronti per andare. Come tutorial per Lisp, penso che Practical Common Lisp sia un libro molto carino, ed è liberamente disponibile.

Ora, quando siete arrivati ​​ad apprezzare il Lisp, potreste volere pacchetti più aggiornati. Vorrei raccomandare di usare clbuild per quello (vedere il collegamento per ulteriori informazioni, comprese le FAQ). È quindi possibile anche creare un nuovo sbcl (riavviato dalla versione della distribuzione).

ASDF, a proposito, è solo una funzione di definizione del sistema. Non sa come scaricare i pacchetti, sa solo come caricare i sistemi in un'immagine Lisp in esecuzione. In altre parole, risolve semplicemente il problema del caricamento automatico dei file multipli che alcuni "sistemi" (libreria) consistono nell'ordine corretto. Le versioni più recenti consentono di caricare un pacchetto (dopo averlo installato, ad es.attraverso clbuild) con un semplice

(asdf:load-sys 'foo) 

Versioni precedenti mostrano concetto interno ASDF operazioni:

(asdf:operate 'asdf:load-op 'foo) 

Quanto sopra load-sys è un'abbreviazione per questo caso di utilizzo comune. Ulteriori informazioni (si potrebbe dire, tutto ciò che devi sapere al riguardo) è allo ASDF Getting Started guide. ASDF è anche incluso in SBCL.

Quando si carica un file sorgente, questo viene compilato automaticamente (producendo file .fasl (caricamento rapido)) in modo che il caricamento sia molto più veloce la volta successiva.

2

Probabilmente uno dei modi più veloci per iniziare è quello di utilizzare Lisp in a Box (o uno spin-off come LispBox). Questi sono set completi di tutto ciò di cui hai bisogno.

Si potrebbe anche provare il Lisp Resource Kit, che è un CD-ROM di avvio con strumenti e documentazione Lisp, già tutti impostati per voi. Mettilo nel tuo lettore CD-ROM e avvia!

2

Tutte queste risposte sono buone, tuttavia sono diventate un po 'obsolete con la nuova popolarità di Quicklisp. Molto vagamente parlando, quicklisp è il gestore di pacchetti per fare di Asdf. Una volta installato Quicklisp su un sistema, è possibile utilizzare (ql:quickload "name of lisp library") per caricare tale libreria nel proprio ambiente Lisp, incluso il download e tutte le sue dipendenze, se necessario. Ad esempio, per scaricare, installare e caricare Hunchentoot e tutte le sue dipendenze, utilizzare (ql:quickload "hunchentoot"). Nelle sessioni Lisp successive, chiamando di nuovo (ql:quickload "hunchentoot") verrà semplicemente caricata la versione già scaricata e installata, rendendo ql:quickload un modo semplice per caricare qualsiasi libreria disponibile localmente o in remoto. Per installare Quicklisp, ti rimando a quicklisp.org.

spiegazione più dettagliata

Lisp funziona un po 'diversamente da altre lingue, quando si tratta di librerie.La prima cosa da sapere è che il linguaggio stesso non fornisce quasi nessuna funzionalità di libreria: ha il numero load (che attraversa ed esegue ogni riga in un file come se li avessi digitati al REPL) e compile-file (che crea un "carico veloce" "file, una versione precompilata del file che load s e può eseguire molto più velocemente). Usando solo ciò che il linguaggio principale fornisce, per caricare una libreria devi andare in ognuno dei suoi file e lo è load (o (load (compile-file "filename")), per una migliore velocità di caricamento/prestazioni). Questo è stato noioso, quindi sono state create una varietà di librerie per gestire il caricamento delle librerie, e al momento asdf è il re (tant'è vero che molte implementazioni chiare lo raggruppano effettivamente). Nella terminologia di asdf, le librerie sono chiamate "sistemi" e i file .asdf descrivono tutti i metadati coinvolti nel caricamento di questi, i sistemi da cui dipendono e l'ordine di caricamento dei file, per lo più, ma possono comunque diventare piuttosto complessi. Quicklisp, quindi, si trova in cima all'asdf. Fondamentalmente, quando asdf scopre che non è in grado di localizzare un sistema, Quicklisp interviene e controlla se quel sistema è disponibile da uno dei repository online di Quicklisp e, in tal caso, lo scarica e fa proseguire Asdf. ql:quickload è fondamentalmente solo un involucro attorno al macchinario asdf per caricare un sistema che consente a Quicklisp di dare una mano in caso di necessità.

Problemi correlati