Usa mit-scheme con REPL e editor insieme
Sto seguendo il corso SICP e come consigliato lo schema mit installato. Voglio usare REPL insieme a un file di schema. Il motivo è perché posso aggiungere il codice dello schema nel file e quindi eseguire i comandi in REPL. Quello che ho funziona, ma il problema è che ogni volta che modifico il file, devo chiudere il terminale e ricaricare il file per REPL per vedere le modifiche.
Esiste un modo per ricaricare facilmente il file o un altro modo per consentire a REPL di vedere le modifiche dal file?
Questa la mia configurazione:
- Ho installato mit-scheme con
brew install mit-scheme - Ho un file locale denominato
code.scm - In terminale, carico il file con
mit-scheme --load /Users/name/Desktop/code.scm - Il terminale ora avvia il REPL e tutto funziona. Il problema è che se aggiungo nuovo codice al file
code.scm, devo chiudere il terminale e richiamarlo di nuovo:mit-scheme --load /Users/name/Desktop/code.scm
Dettagli del sistema:
- macOS Catalina - 10.15.6
- App terminale Mac predefinita - Versione 2.10.0
- Schema MIT / GNU in esecuzione su OS X
- L'editor di testo che utilizzo è Atom - 1.50.0
Modifica domanda n. 1 (in base alla risposta di seguito)
Ho provato a seguire le istruzioni ma è complicato.
Questo è quello che ho fatto:
Correre
mit-scheme < /Users/Desktop/code.scm
Dopo questo sono corso
mit-scheme --editad aprire Edwin. Ho provato a utilizzare il codice all'interno delcode.scmfile ma non lo riconosce. Questo è il codice nelcode.scmfile:
Questo è quello che voglio essere in grado di fare: nota in questa immagine, posso digitare un comando, premere invio e il comando viene eseguito automaticamente. Tuttavia, voglio essere in grado di chiamare (fib 5)e fa riferimento alla funzione nel code.scmfile.
Qualcuno potrebbe spiegare passo dopo passo come farlo? È confuso guardare la documentazione per i siti web di schemi.
Risposte
In realtà è disponibile una loadprocedura integrata nello schema MIT REPL. Valutare
(load "path/to/file.scm")
fa sì che il file Scheme situato in path / to / file.scm venga valutato al livello più alto (si noti che sono obbligatorie le virgolette doppie attorno al nome del file).
E, a quanto pare, questa stessa funzione può essere utilizzata per ricaricare un file. Con questo in mente, un possibile "flusso di lavoro" potrebbe essere simile a questo:
- Crea nuovo file sorgente
- Valuta
(load "path/to/file.scm")nel REPL - Modifica file sorgente
- Valuta
(load "path/to/file.scm")nel REPL - ...eccetera.
Sfortunatamente, non credo che ci sia una procedura di "ricarica" incorporata. Ma ... se ti ritrovi a ricaricare molto (come immagino farai), puoi sempre scrivere rapidamente il tuo all'inizio di una sessione di hacking:
(define (reload)
(load "path/to/file.scm"))
Quindi chiama (reload)ogni volta che apporti una modifica al tuo file sorgente.
Se ti interessa usare Emacs, direi che vale la pena provare. C'è un po 'di una curva di apprendimento, ma non è così ripida come sembra in primo piano :)
Inoltre, non posso raccomandare abbastanza i linguaggi di programmazione Racket . C'è un modo incredibilmente semplice per configurarlo per SICP, ed è un ambiente molto più indulgente di Emacs. Fammi sapere se sei interessato e desideri aiuto per iniziare.
Dovresti usare emacs con xscheme.el . Funziona molto meglio.
Se continui come fai, puoi anche fare mit-scheme < code.scmo mit-scheme --edit code.scme otterrai anche un *repl*buffer all'interno di edwin .
Ti consiglio comunque il metodo emacs.
Un (load "/path/to/file")comando dovrebbe essere disponibile all'interno di MIT Scheme e nell'editor Edwin con esso fornito. Tuttavia, in realtà consiglierei di utilizzare Emacs e utilizzare Geiser al suo interno per accedere sia a REPL che per aiutare con la modifica del file di schema. Rende anche la gestione di vari schemi REPL come Chez Scheme , Racket , MIT Scheme , Guile , Chicken , Gambit e Chibi Scheme abbastanza semplice. Lo stesso (load "/path/to/file")comando sarebbe quindi disponibile all'interno del REPL in esecuzione sotto Geiser , all'interno di Emacs , ma è generalmente molto più potente e senza interruzioni rispetto a quando si utilizza il REPL "nudo". Emacs è ottimizzato per essere utilizzato con Scheme e LISP. Altamente raccomandato.
Valuta l'intero buffer: premi Mo (M è Alt su Windows). Nella finestra del file sorgente, premerlo. Valuterà l'intero buffer cioè (ri) caricherà l'intero file sorgente (senza nemmeno salvarlo prima). L'ho trovato cercando su Google "mit scheme edwin tutorial" . Edwin è una specie di Emacs stesso.
Questa pagina dice: "Cc Cs quando fatto in un buffer in modalità schema [cioè la finestra del file sorgente dello schema], passerà al buffer di interazione dello schema [cioè REPL]". cioè si preme Cx Cs per salvare il file , Mo per valutare (cioè caricare), Cc Cs per passare a REPL.
Se hai diviso lo schermo con C-x 2tra un buffer di file sorgente e REPL ("buffer di interazioni"), puoi passare da uno all'altro premendo C-x o(per "vai all'altra finestra").