Usa mit-scheme con REPL e editor insieme

Oct 13 2020

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:

  1. Ho installato mit-scheme con brew install mit-scheme
  2. Ho un file locale denominato code.scm
  3. In terminale, carico il file con mit-scheme --load /Users/name/Desktop/code.scm
  4. 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:

  1. Correre mit-scheme < /Users/Desktop/code.scm

  2. Dopo questo sono corso mit-scheme --editad aprire Edwin. Ho provato a utilizzare il codice all'interno del code.scmfile ma non lo riconosce. Questo è il codice nel code.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

2 WilliamLewis Oct 15 2020 at 00:25

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.

1 alinsoar Oct 13 2020 at 14:06

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.

1 haziz Dec 19 2020 at 18:02

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.

WillNess Dec 20 2020 at 22:01

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").