Use mit-scheme com REPL e editor juntos

Oct 13 2020

Estou passando pelo curso SICP e, conforme recomendado, instalei o esquema mit. Desejo usar o REPL junto com um arquivo de esquema. A razão é porque posso adicionar o código do esquema no arquivo e, em seguida, executar os comandos no REPL. O que eu tenho funciona, mas o problema é que toda vez que edito o arquivo, tenho que sair do terminal e recarregar o arquivo para REPL para ver as alterações.

Existe uma maneira de recarregar o arquivo facilmente ou alguma outra maneira do REPL ver as alterações do arquivo?

Esta minha configuração:

  1. Eu instalei o esquema mit com brew install mit-scheme
  2. Eu tenho um arquivo local chamado code.scm
  3. No terminal, carrego o arquivo com mit-scheme --load /Users/name/Desktop/code.scm
  4. O Terminal agora inicia o REPL e tudo funciona. O problema é que se eu adicionar um novo código ao arquivo code.scm, tenho que sair do terminal e chamar novamente:mit-scheme --load /Users/name/Desktop/code.scm

Detalhes do sistema:

  • macOS Catalina - 10.15.6
  • Aplicativo de Terminal Mac padrão - Versão 2.10
  • Esquema MIT / GNU em execução no OS X
  • O editor de texto que uso é o Atom - 1.50.0

Edição da pergunta nº 1 (com base na resposta abaixo)

Tentei seguir as instruções, mas isso é complicado.

Isso é o que eu fiz:

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

  2. Depois disso, corri mit-scheme --editpara abrir o Edwin. Tentei usar o código dentro do code.scmarquivo, mas não o reconhece. Este é o código no code.scmarquivo:

Isso é o que eu quero ser capaz de fazer: Observe nesta imagem, eu posso digitar um comando, pressionar enter e ele executa o comando automaticamente. No entanto, desejo poder chamar (fib 5)e fazer referência à função no code.scmarquivo.

Alguém poderia explicar passo a passo como fazer isso? É confuso olhar a documentação para sites de esquemas.

Respostas

2 WilliamLewis Oct 15 2020 at 00:25

Na verdade, há um loadprocedimento integrado disponível no REPL do Esquema do MIT. Avaliando

(load "path/to/file.scm")

faz com que o arquivo Scheme localizado em path / to / file.scm seja avaliado no nível superior (observe que as aspas duplas ao redor do nome do arquivo são obrigatórias).

E, como se constatou, essa mesma função pode ser usada para recarregar um arquivo. Com isso em mente, um possível "fluxo de trabalho" pode ter a seguinte aparência:

  • Criar novo arquivo de origem
  • Avalie (load "path/to/file.scm")no REPL
  • Editar arquivo fonte
  • Avalie (load "path/to/file.scm")no REPL
  • ... etc.

Infelizmente, não acho que haja um procedimento de "recarregamento" embutido. Mas ... se você estiver recarregando muito (como eu imagino que fará), você sempre pode escrever seu próprio rapidamente no início de uma sessão de hacking:

(define (reload)
  (load "path/to/file.scm"))

Em seguida, basta ligar (reload)sempre que fizer uma alteração no arquivo de origem.

Se você estiver interessado em usar o Emacs, eu diria que vale a pena tentar. Há uma pequena curva de aprendizado, mas não é tão íngreme quanto parece à frente :)

Além disso, não posso recomendar a (s) linguagem (s) de programação Racket o suficiente. Há uma maneira incrivelmente direta de configurá-lo para SICP e é um ambiente muito mais tolerante do que o Emacs. Deixe-me saber se você está interessado e deseja ajuda para começar.

1 alinsoar Oct 13 2020 at 14:06

Você deve usar emacs com xscheme.el . Funciona muito melhor.

Se continuar como faz, você também pode fazer mit-scheme < code.scmou mit-scheme --edit code.scme também obterá um *repl*buffer dentro do edwin .

Eu recomendo a você o jeito emacs, entretanto.

1 haziz Dec 19 2020 at 18:02

Um (load "/path/to/file")comando deve estar disponível para você no MIT Scheme e no editor Edwin que o acompanha. No entanto, eu realmente recomendaria que você use o Emacs e use o Geiser dentro dele para acessar o REPL e para ajudar na edição do arquivo de esquema. Ele também torna o tratamento de vários REPLs de esquema, como Esquema Chez , Racket , Esquema MIT , Guile , Chicken , Gambit e Esquema Chibi bastante fácil. O mesmo (load "/path/to/file")comando estaria disponível para você dentro do REPL rodando sob Geiser , dentro do Emacs , mas geralmente é muito mais poderoso e contínuo do que ao usar o REPL "simples". O Emacs está muito bem ajustado para uso com Scheme e LISP. Altamente recomendado.

WillNess Dec 20 2020 at 22:01

Avalie o buffer inteiro: pressione Mo (M é Alt no Windows). Quando estiver na janela do arquivo de origem, pressione-o. Ele avaliará todo o buffer, ou seja, (re) carregará todo o arquivo de origem (sem nem mesmo salvá-lo primeiro). Eu encontrei googling "mit scheme edwin tutorial" . Edwin é o próprio Emacs.

Esta página diz: "Cc Cs quando feito em um buffer de modo de esquema [isto é, janela do arquivo de origem do esquema], mudará para o buffer de interação do esquema [isto é REPL]". ou seja, você pressiona Cx Cs para salvar o arquivo , Mo para avaliar (ou seja, carregar), Cc Cs para alternar para o REPL.

Se você dividiu sua tela C-x 2entre um buffer de arquivo de origem e o REPL ("buffer de interações"), pode alternar entre eles pressionando C-x o(para "ir para a outra janela").