Ошибка установки нагрузки с шумом? и автоматический выход в 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)? 

Есть два основных вопроса:

  1. Результаты обоих (abs 42) а также (abs -24) не печатаются, несмотря на то, что я уже установил load-noisily? в #t,
  2. Я не хочу входить 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:

  1. Оставь только свой (define ...) в sicp.scm, удалите все остальное из файла.
  2. открыто sicp.scm в VIM и нажмите ,c запустить / подключить сервер swank. Это также открывает окно REPL.
  3. Поместите курсор где-нибудь в (define ...) сформировать и нажать ,d определить вашу функцию в REPL.
  4. Перейдите в окно REPL и введите свое тестовое выражение (например, (abs 42)) в режиме вставки, затем нажмите ENTER, это оценит тестовое выражение и отобразит результат в окне REPL.
  5. Вы также можете оценить s-выражения из исходного окна через ,d, Обратите внимание, что при оценке нескольких s-выражений за один шаг (например, оценка визуального выбора с помощью ,r) затем в окне REPL отображается только результат последнего s-выражения.
  6. В случае возникновения ошибки, 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.

Другие вопросы по тегам