错误地设置负载?并在 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)?
主要有两个问题:
(abs 42)
和 (abs -24)
的结果都没有打印出来,尽管我已经将 load-noisily?
设置为 #t
。
- 我不想在每次脚本为运行时手动输入
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:
中的做法
- 只保留
sicp.scm
中的 (define ...)
,删除文件中的所有其他内容。
- 在vim中打开
sicp.scm
并按,c
进入start/connectswank服务器。这也会打开一个 REPL window.
- 将光标放在
(define ...)
表格的某处,然后按 ,d
在 REPL 中定义您的函数。
- 转到 REPL window 并在插入模式下键入您的测试表达式(例如
(abs 42)
),然后按 ENTER,这将计算测试表达式并在 REPL [=38] 中显示结果=].
- 您还可以通过
,d
计算源 window 中的 s 表达式。请注意,当在一个步骤中评估多个 s 表达式时(例如,通过 ,r
评估视觉选择),那么只有最后一个 s 表达式的结果显示在 REPL window.
- 如果发生错误,slimv 会打开调试器 window,显示回溯和可能的重启。
为了用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)?
主要有两个问题:
(abs 42)
和(abs -24)
的结果都没有打印出来,尽管我已经将load-noisily?
设置为#t
。- 我不想在每次脚本为运行时手动输入
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:
中的做法- 只保留
sicp.scm
中的(define ...)
,删除文件中的所有其他内容。 - 在vim中打开
sicp.scm
并按,c
进入start/connectswank服务器。这也会打开一个 REPL window. - 将光标放在
(define ...)
表格的某处,然后按,d
在 REPL 中定义您的函数。 - 转到 REPL window 并在插入模式下键入您的测试表达式(例如
(abs 42)
),然后按 ENTER,这将计算测试表达式并在 REPL [=38] 中显示结果=]. - 您还可以通过
,d
计算源 window 中的 s 表达式。请注意,当在一个步骤中评估多个 s 表达式时(例如,通过,r
评估视觉选择),那么只有最后一个 s 表达式的结果显示在 REPL window. - 如果发生错误,slimv 会打开调试器 window,显示回溯和可能的重启。