首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在常见的lisp中,如何在抛出错误而未捕获的地方重新启动?

在常见的Lisp中,可以使用特殊操作符restart-case来在抛出错误而未捕获的地方重新启动。restart-case提供了一种处理错误的机制,它允许我们定义多个重启选项,当错误发生时,可以根据需要选择合适的重启选项来解决问题。

restart-case的语法如下:

代码语言:txt
复制
(restart-case body-form &rest clauses)

其中,body-form是需要执行的代码块,clauses是一个重启选项的列表,每个选项由一个关键字和对应的代码块组成。

以下是一个示例代码:

代码语言:txt
复制
(defun divide (x y)
  (restart-case
      (if (zerop y)
          (error "Divide by zero error")
          (/ x y))
    (retry () :report "Retry division with new values."
           :interactive (lambda ()
                          (list (read-number "Enter new dividend: ")
                                (read-number "Enter new divisor: "))))
    (abort () :report "Abort division and return NIL."
           :interactive (lambda ()
                          (list nil)))))

在上述示例中,当除数为0时,会抛出一个错误。但是我们使用了restart-case来定义两个重启选项:retryabort。当错误发生时,可以选择重启选项来解决问题。

对于这个示例,如果选择retry选项,会要求用户输入新的被除数和除数;如果选择abort选项,会直接返回NIL

需要注意的是,不同的Lisp方言可能会有略微不同的语法和操作符,但核心思想是相似的。

相关搜索:在异步等待函数中捕获未捕获的错误angular-fullstack堆栈抛出未捕获的sybtax错误<在行中Jasmine Karma错误“在所有未捕获的ReferenceError中抛出错误:容器未定义抛出”在node-ftp模块中捕获未捕获的异常错误Karma |离子|未捕获错误:未捕获错误:未捕获(在promise中):TypeError:无法读取未定义的属性'getToken‘如何在Perl子例程中处理捕获和未捕获的错误?获取未捕获的错误:无效参数: null。在Dart中在JS文件中找不到未捕获的类型错误角度测试未捕获错误:未捕获(在promise中):TypeError:无法读取null的属性(读取'params')未处理的运行时错误或未捕获的(在承诺中)错误如何防止webpack在未使用的模块中抛出打字错误?如何在PHP中捕获由第三方库抛出的错误在springboot中,在添加了依赖文件之后,我在错误的地方抛出了/newart.jsp未捕获(在承诺中):错误:无法读取未定义的属性无法在ApolloServer中抛出错误,在将错误捕获到Cognito时未处理的承诺拒绝如何在html中包含php文件,这样网站就会在php开始的地方加载,而不是在开始的地方?致命错误:未捕获错误:在中调用未定义的函数curl_init()错误错误:未捕获(在promise中):TypeError:无法读取未定义的属性'id‘错误:未捕获(在promise中) TypeError:文档不是HTMLButtonElement.<anonymous>中的函数未捕获错误:无法解析图表的所有参数:(?,?)在Ionic2中
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券