Ошибка установки нагрузки с шумом? и автоматический выход в MIT-Scheme
Чтобы отлаживать сценарии MIT-Scheme с помощью Vim, я хочу иметь возможность запускать файл сценария, который в данный момент редактируется, настолько удобно, насколько это возможно. Вот что я делаю:
sicp.scm
(set! load-noisily? #t)
(define
(abs x)
(cond
((> x 0) x)
((= x 0) 0)
((< x 0) (- x))
)
)
(abs 42)
(abs -24)
(exit)
После выполнения :!mit-scheme --eval "(load \"sicp\")"
при редактировании sicp.scm
в Vim я получаю:
Image saved on Saturday May 17, 2014 at 2:39:25 AM
Release 9.2 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/x86-64 4.118
Edwin 3.116
;Loading "sicp.scm"...
Kill Scheme (y or n)?
Есть два основных вопроса:
- Результаты обоих
(abs 42)
а также(abs -24)
не печатаются, несмотря на то, что я уже установилload-noisily?
в#t
, - Я не хочу входить
y
вручную убивать схему при каждом запуске скрипта. Это должно выйти автоматически, так как есть(exit)
линия в конце.
Вот ожидаемый результат:
Image saved on Saturday May 17, 2014 at 2:39:25 AM
Release 9.2 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/x86-64 4.118
Edwin 3.116
;Loading "sicp.scm"... done
;Value: 42
;Value: 24
Moriturus te saluto.
Как я могу это сделать?
2 ответа
Я не уверен, что этот квалифицируется как полный ответ, но вот как это сделать в vim + slimv:
- Оставь только свой
(define ...)
вsicp.scm
, удалите все остальное из файла. - открыто
sicp.scm
в VIM и нажмите,c
запустить / подключить сервер swank. Это также открывает окно REPL. - Поместите курсор где-нибудь в
(define ...)
сформировать и нажать,d
определить вашу функцию в REPL. - Перейдите в окно REPL и введите свое тестовое выражение (например,
(abs 42)
) в режиме вставки, затем нажмите ENTER, это оценит тестовое выражение и отобразит результат в окне REPL. - Вы также можете оценить s-выражения из исходного окна через
,d
, Обратите внимание, что при оценке нескольких s-выражений за один шаг (например, оценка визуального выбора с помощью,r
) затем в окне REPL отображается только результат последнего s-выражения. - В случае возникновения ошибки, SlimV открывает окно отладчика, отображает обратную трассировку и возможные перезапуски.
Хорошо - я никогда не использовал Vim и не использовал Scheme с 1992 года - так что я думаю здесь.
настройка load-noisily?
внутри загружаемого файла, вероятно, слишком поздно (потому что загрузка уже решила не быть шумной, прежде чем он даже откроет файл). Вам, вероятно, нужно установить его перед звонком load
, Попробуйте удалить его из файла и использовать :!mit-scheme --eval "(begin (set! load-noisily? #t) (load \"sicp\"))"
Так далеко как (exit)
обеспокоен, я понятия не имею, но...
Я также никогда не использовал slimv (или здесь), но это, очевидно, Vim-эквивалент Slime, который я использовал. Slime превращает Emacs в замечательную среду разработки Lisp и, надеюсь, сделает то же самое для Scheme и Vim.