错误地设置负载?并在 MIT-Scheme 中自动退出

Error setting load-noisily? and auto-exiting in MIT-Scheme

为了用Vim调试MIT-Scheme脚本,我希望能够运行尽可能方便地运行当前正在编辑的脚本文件。这是我正在做的事情:

sicp.scm

(set! load-noisily? #t)

(define
    (abs x)
    (cond
        ((> x 0) x)
        ((= x 0) 0)
        ((< x 0) (- x))
    )
)

(abs 42)
(abs -24)

(exit)

在Vim中编辑sicp.scm时执行:!mit-scheme --eval "(load \"sicp\")"后,我得到:

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来杀死scheme。它应该会自动退出,因为末尾有 (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.

我该怎么做?

好的 - 我从未使用过 Vim,并且自 1992 年以来就没有使用过 Scheme - 所以我在这里猜测。

设置load-noisily?inside正在加载的文件可能为时已晚(因为加载甚至在打开文件之前就已经决定不吵了)。您可能需要在调用 load 之前设置它。尝试从文件中删除它并使用 :!mit-scheme --eval "(begin (set! load-noisily? #t) (load \"sicp\"))"

(exit)而言,我不知道,但是...

我也从未使用过 slimv (or here),但它显​​然是 Vim 等同于 Slime,我 使用过。 Slime 将 emacs 变成了美妙的 Lisp IDE,并且有望为 Scheme 和 Vim.

做同样的事情

我不确定这个是否符合完整答案的条件,但这是 vim+slimv:

中的做法
  1. 只保留 sicp.scm 中的 (define ...),删除文件中的所有其他内容。
  2. 在vim中打开sicp.scm并按,c进入start/connectswank服务器。这也会打开一个 REPL window.
  3. 将光标放在 (define ...) 表格的某处,然后按 ,d 在 REPL 中定义您的函数。
  4. 转到 REPL window 并在插入模式下键入您的测试表达式(例如 (abs 42)),然后按 ENTER,这将计算测试表达式并在 REPL [=38] 中显示结果=].
  5. 您还可以通过 ,d 计算源 window 中的 s 表达式。请注意,当在一个步骤中评估多个 s 表达式时(例如,通过 ,r 评估视觉选择),那么只有最后一个 s 表达式的结果显示在 REPL window.
  6. 如果发生错误,slimv 会打开调试器 window,显示回溯和可能的重启。