题
当将 DrScheme 与 R5RS 一起使用时,没有错误功能。我打算自己编写,但不知道如何停止程序执行。我尝试过以下命令:
- (停止)
- (出口)
- (错误)
但没有一个起作用。如何停止程序执行?
解决方案
SLIB (可移植的Scheme库)有一个ERROR的实现。您可能想看看它,或者在您的程序中使用 SLIB。
除此之外,停止程序的一种方法就是引发一个不同的错误!尝试这样的事情(感谢 斯蒂芬·霍本):
(define (error reason . args)
(display "Error: ")
(display reason)
(for-each (lambda (arg)
(display " ")
(write arg))
args)
(newline)
(scheme-report-environment -1)) ;; we hope that this will signal an error
虽然这确实会引发第二个(不相关的)错误,但它肯定会停止程序执行。
其他提示
您有需要使用 R5RS 的理由吗?DrScheme 中的其他语言定义定义 error
和 exit
. 。例如, (module ...)
PLT语言定义 error
和 exit
. 。调用 mzscheme
从命令行也给你这些定义。
笔记:我有 DrScheme 372,它已经很旧了。不过,事情不应该发生太大变化。
一个丑陋的解决方案是将 abort 定义为运行时错误。例如,其中任何一个都可以解决问题
(define abort "the program was aborted")
(define abort 123)
(define abort #f)
任何中止调用
(abort)
如果你幸运的话,应该会生成一个运行时错误,甚至显示字符串、错误代码或你关心的任何内容。
不隶属于 StackOverflow