Совместное использование mit-схемы с REPL и редактором

Я прохожу SICP Конечно и по рекомендации установил мит-схему. Я хочу использовать REPL вместе с файлом схемы. Причина в том, что я могу добавить код схемы в файл, а затем запустить команды в REPL. То, что у меня есть, работает, но проблема в том, что каждый раз, когда я редактирую файл, мне нужно выйти из терминала и перезагрузить файл, чтобы REPL увидел изменения.

Есть ли способ легко перезагрузить файл или какой-либо другой способ, чтобы REPL увидел изменения в файле?

Это мои настройки:

  1. Я установил мит-схему с brew install mit-scheme
  2. У меня есть локальный файл с именем code.scm
  3. В терминале я загружаю файл с mit-scheme --load /Users/name/Desktop/code.scm
  4. Терминал теперь запускает REPL, и все работает. Проблема в том, что если я добавлю новый код в файл code.scm, мне придется выйти из терминала и снова вызвать его: mit-scheme --load /Users/name/Desktop/code.scm

Сведения о системе:

  • macOS Catalina - 10.15.6
  • Терминальное приложение для Mac по умолчанию - версия 2.10
  • Схема MIT / GNU, работающая под OS X
  • Я использую текстовый редактор Atom - 1.50.0.

Редактировать вопрос №1 (на основании ответа ниже)

Я пробовал следовать инструкциям, но это сложно.

Вот что я сделал:

  1. Запустите mit-scheme < /Users/Desktop/code.scm  введите описание изображения здесь

  2. После этого я запустил mit-scheme --edit, чтобы открыть Эдвина. Я попытался использовать код из файла code.scm, но он его не распознает. Это код в code.scm файле:  введите описание изображения здесь

Это то, что я хочу делать: Обратите внимание на это изображение: я могу ввести команду, нажать клавишу ВВОД, и она автоматически запустит команду. Однако я хочу иметь возможность вызывать (fib 5), и он ссылается на функцию в code.scm файле. введите описание изображения здесь

Может ли кто-нибудь шаг за шагом объяснить, как это сделать? Сложно смотреть на документацию по сайтам схем.


person JEL    schedule 13.10.2020    source источник


Ответы (4)


На самом деле есть встроенная load процедура, доступная в REPL схемы MIT. Оценка

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

заставляет файл схемы, расположенный по адресу path / to / file.scm, оцениваться на верхнем уровне (обратите внимание, что необходимы двойные кавычки вокруг имени файла).

И, как оказалось, эту же функцию можно использовать для перезагрузки файла. С учетом этого возможный рабочий процесс может выглядеть следующим образом:

  • Создать новый исходный файл
  • Оцените (load "path/to/file.scm") в REPL
  • Редактировать исходный файл
  • Оцените (load "path/to/file.scm") в REPL
  • ...и т.д.

К сожалению, я не думаю, что есть встроенная процедура перезагрузки. Но ... если вы обнаружите, что много перезагружаетесь (как я предполагаю, вы это сделаете), вы всегда можете быстро написать свое собственное в начале сеанса взлома:

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

А затем просто вызывайте (reload) всякий раз, когда вы вносите изменения в исходный файл.

Если вам интересно использовать Emacs, я бы сказал, что стоит попробовать. Есть немного кривой обучения, но она не такая крутая, как кажется на первый взгляд :)

Кроме того, я не могу порекомендовать язык (и) программирования Racket в достаточной степени. Существует невероятно простой способ настроить его для SICP, и это гораздо более щадящая среда, чем Emacs. Дайте мне знать, если вы заинтересованы и вам нужна помощь в начале работы.

person William Lewis    schedule 14.10.2020
comment
Спасибо за пошаговые инструкции! Это именно то, что я искал! Делает ли здесь Emacs все это проще? Это означает, что я могу синхронизировать REPL и исходный файл и мне не нужно постоянно вызывать перезагрузку каждый раз, когда я меняю исходный файл? - person JEL; 15.10.2020
comment
Не за что! И Emacs действительно делает это намного проще, по крайней мере, когда вы к нему привыкнете. Что я обычно делаю (и я думаю, что это довольно универсально), так это разбиение Emacs на два экрана посередине с исходным файлом на одном и REPL на другом. Затем, после внесения любых изменений, вы можете нажать Ctrl + C, а затем Ctrl + C еще раз, чтобы загрузить файл в REPL и переключиться в окно REPL. Затем немного поиграйте с REPL, вернитесь к исходному файлу и повторите. Нажатие Ctrl + C дважды для меня намного быстрее, чем переключение окон и ввод всей команды / процедуры. - person William Lewis; 15.10.2020
comment
Принял ответ! Большое вам спасибо еще раз! Я попробую использовать Emacs с разделенным экраном со схемой. Надеюсь, это легко сделать. Было бы здорово сделать это с Эдвином, но, похоже, это невозможно и нужно использовать Emacs. - person JEL; 16.10.2020

Вам следует использовать emacs с xscheme.el. Работает намного лучше.

Если вы продолжите, как вы делаете, вы также можете сделать mit-scheme < code.scm или mit-scheme --edit code.scm, и вы также получите _ 3_ буфер внутри edwin.

Однако я рекомендую вам использовать emacs.

person alinsoar    schedule 13.10.2020
comment
Спасибо, что ответили. В учебных целях я пробую оба метода, которые вы здесь описываете. Я запустил mit-scheme < code.scm в терминале, что заставило его отобразить то, что было в моем файле, а затем закончил с End of input stream reached. REPL не был предоставлен. Есть мысли по этому поводу? - person JEL; 13.10.2020
comment
@JEL по предоставленной мной ссылке вы можете прочитать, как активировать буфер реплики в edwin. М-х репл. - person alinsoar; 13.10.2020
comment
хм, я пробовал, но это сложно. Вы могли видеть мой обновленный вопрос с примечаниями? Объясняю, как пробовал ваше решение. См.: Question Edit #1 выше - person JEL; 14.10.2020
comment
@JEL Мне очень жаль, но в сети есть много руководств по использованию mit-scheme. Вам следует задать новый вопрос, а не обновлять тот же вопрос. Я дал достаточно ссылок, чтобы ответить на ваш вопрос. - person alinsoar; 14.10.2020
comment
Спасибо за ответ. Это распространенный шаблон, который я вижу в Stack Overflow, когда люди обновляют свои вопросы дополнительной информацией. Это не был новый вопрос, он просто прояснил мой первоначальный вопрос. Я думаю, людям нравится этот шаблон, поэтому переполнение стека не рассылается спамом. Еще раз спасибо за помощь! - person JEL; 16.10.2020

Команда (load "/path/to/file") должна быть доступна вам в схеме MIT и редакторе Edwin. с участием. Однако я бы действительно рекомендовал вам использовать Emacs и использовать Geiser, чтобы получить доступ к REPL и помочь с редактированием файла схемы. Он также позволяет работать с различными REPL схем, такими как Chez Scheme, Racket, Схема MIT, Хитрость, Курица, Гамбит и Chibi Scheme довольно легко. Та же самая команда (load "/path/to/file") будет доступна вам в REPL, запущенном под Geiser, в пределах Emacs, но, как правило, он намного мощнее и удобнее, чем при использовании простого REPL. Emacs очень хорошо настроен для использования с Scheme и LISP. Настоятельно рекомендуется.

person haziz    schedule 19.12.2020

Оцените весь буфер: нажмите Mo (M - это Alt в Windows ). В окне исходного файла нажмите его. Он будет оценивать весь буфер, то есть (повторно) загружать весь исходный файл (даже не сохраняя его предварительно). Я нашел его с помощью googling mit scheme edwin tutorial. Эдвин - это своего рода Emacs.

На этой странице написано: Копия сертификатов по завершении в буфере режима схемы [т.е. Окно исходного файла схемы], переключится на буфер взаимодействия схемы [т.е. REPL]. т.е. вы нажимаете Cx Cs, чтобы сохранить файл , Mo для оценки (т.е. загрузки), Cc Cs для переключения на REPL.

Если вы разделили экран с C-x 2 между буфером исходного файла и REPL (буфер взаимодействий), вы можете переключаться между ними, нажимая C-x o (для перехода в другое окно).

person Will Ness    schedule 20.12.2020