Utilice mit-esquema con REPL y editor juntos
Estoy pasando por el curso SICP y como se recomienda instalar mit-esquema. Quiero usar REPL junto con un archivo de esquema. La razón es porque puedo agregar código de esquema en el archivo y luego ejecutar los comandos en REPL. Lo que tengo funciona, pero el problema es que cada vez que edito el archivo, tengo que salir de la terminal y volver a cargar el archivo para que REPL vea los cambios.
¿Hay alguna forma de volver a cargar el archivo fácilmente o de alguna otra forma para que REPL vea los cambios del archivo?
Esta es mi configuración:
- Instalé mit-esquema con
brew install mit-scheme - Tengo un archivo local llamado
code.scm - En la terminal, cargo el archivo con
mit-scheme --load /Users/name/Desktop/code.scm - Terminal ahora inicia REPL y todo funciona. El problema es que si agrego un nuevo código al archivo
code.scm, tengo que salir de la terminal y llamar a esto nuevamente:mit-scheme --load /Users/name/Desktop/code.scm
Detalles del sistema:
- macOS Catalina - 10.15.6
- Aplicación de terminal Mac predeterminada - Versión 2.10
- Esquema MIT / GNU que se ejecuta bajo OS X
- El editor de texto que utilizo es Atom - 1.50.0
Pregunta Editar # 1 (Basado en la respuesta a continuación)
Intenté seguir las instrucciones, pero esto es complicado.
Esto es lo que hice:
Carrera
mit-scheme < /Users/Desktop/code.scm
Después de esto corrí
mit-scheme --edita abrir Edwin. Traté de usar el código dentro delcode.scmarchivo pero no lo reconoce. Este es el código en elcode.scmarchivo:
Esto es lo que quiero poder hacer: Fíjense en esta imagen, puedo escribir un comando, presionar enter y automáticamente ejecuta el comando. Sin embargo, quiero poder llamar (fib 5)y hace referencia a la función en el code.scmarchivo.
¿Alguien podría explicar paso a paso cómo hacer esto? Es confuso mirar la documentación de los sitios web de esquemas.
Respuestas
En realidad, hay un loadprocedimiento integrado disponible en MIT Scheme REPL. Evaluar
(load "path/to/file.scm")
hace que el archivo Scheme ubicado en la ruta / a / file.scm se evalúe en el nivel superior (tenga en cuenta que se requieren las comillas dobles alrededor del nombre del archivo).
Y, como resulta, esta misma función se puede usar para recargar un archivo. Con esto en mente, un posible "flujo de trabajo" podría verse así:
- Crear nuevo archivo fuente
- Evaluar
(load "path/to/file.scm")en el REPL - Editar archivo fuente
- Evaluar
(load "path/to/file.scm")en el REPL - ... etc.
Desafortunadamente, no creo que haya un procedimiento de "recarga" incorporado. Pero ... si te encuentras recargando mucho (como imagino que lo harás), siempre puedes escribir rápidamente el tuyo al comienzo de una sesión de piratería:
(define (reload)
(load "path/to/file.scm"))
Y luego simplemente llame (reload)cada vez que realice un cambio en su archivo fuente.
Si está interesado en usar Emacs, diría que vale la pena intentarlo. Hay una pequeña curva de aprendizaje, pero no es tan empinada como parece :)
Además, no puedo recomendar el (los) lenguaje (s) de programación Racket lo suficiente. Hay una forma increíblemente sencilla de configurarlo para SICP, y es un entorno mucho más tolerante que Emacs. Avíseme si está interesado y desea ayuda para comenzar.
Debería utilizar emacs con xscheme.el . Funciona mucho mejor.
Si continúa como lo hace, también puede hacer mit-scheme < code.scmo mit-scheme --edit code.scmy también obtendrá un *repl*búfer dentro de edwin .
Sin embargo, te recomiendo el método emacs.
Un (load "/path/to/file")comando debería estar disponible para usted dentro de MIT Scheme y el editor Edwin con el que viene. Sin embargo, realmente recomendaría que use Emacs , y use Geiser dentro de eso para acceder tanto al REPL como para ayudar con la edición de archivos de esquema. También hace que lidiar con varios REPL de esquemas como Chez Scheme , Racket , MIT Scheme , Guile , Chicken , Gambit y Chibi Scheme sea bastante sencillo. El mismo (load "/path/to/file")comando estaría disponible para usted dentro del REPL que se ejecuta bajo Geiser , dentro de Emacs , pero generalmente es mucho más poderoso y fluido que cuando usa el REPL "desnudo". Emacs está muy bien adaptado para usarse con Scheme y LISP. Muy recomendable.
Evaluar todo el búfer: presione Mo (M es Alt en Windows). Cuando esté en la ventana del archivo de origen, presiónelo. Evaluará todo el búfer, es decir, (re) cargará todo el archivo fuente (sin siquiera guardarlo primero). Lo encontré buscando en Google "mit esquema edwin tutorial" . Edwin es una especie de Emacs en sí.
Esta página dice: "Cc Cs cuando se hace en un búfer de modo de esquema [es decir, la ventana del archivo fuente de Scheme], cambiará al búfer de interacción de Scheme [es decir, REPL]". es decir, presiona Cx Cs para guardar el archivo , Mo para evaluar (es decir, cargar), Cc Cs para cambiar al REPL.
Si ha dividido su pantalla C-x 2entre un búfer de archivo de origen y el REPL ("búfer de interacciones"), puede cambiar entre ellos presionando C-x o(para "ir a la otra ventana").