问题标签 [condition-system]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
exception-handling - 'store-value' 和 'use-value' 的语义在 Common Lisp 错误处理系统中重新启动
我一直在阅读 Peter Seibel Practical Common Lisp的优秀书籍,以解决我一直在做的与 Common Lisp 错误处理系统相关的一些研究。
虽然看了书上的解释,也试着在网上挖了一些资料,但一直无法理解andrestarts的含义和STORE-VALUE
用法USE-VALUE
。有人可以解释这些功能的目的是什么吗?
lisp - 是否有实施条件重启系统的书/指南
我有兴趣了解有关条件重启系统及其工作原理的更多信息。我不知道从哪里开始。我一直在查看源代码,但想知道是否有任何更高级别的指南可用。
common-lisp - 常用列表:在不同的包中使用 handler-case
我有以下 lisp 代码:
我在其中定义了一个总是失败但提供重新启动的虚拟函数:hop.
在另一个包中,在这个文件中:
我定义了从第一个包中调用函数 (hop) 的函数 (hip) 和 (dhip)。
当我调用 (dhip) 时,sbcl 向我提供了一个提示,我可以在其中选择使用我的 restart hop 重新启动:
这是我所期望的。
但是,当我调用(hip)时,(compute-restarts)未列出我的重新启动跃点,并且无法使用它:(
您知道可以做些什么来使这项工作有效吗?
谢谢,
纪尧尔
exception - common lisp 异常处理(条件和重启)
我已经阅读了common lisp“Practical Common Lisp”异常处理章节好几天了,但是我现在对示例和解释感到很困惑,同时我尝试编写一些测试示例,但它没有像我一样工作预期,以下是我的测试样本。
条件定义
/li>定义打印奇数的函数
/li>重启功能
/li>重启案例
/li>
我要做的就是打印所有奇数并跳过偶数错误,我的样本有什么问题?有人帮忙吗?提前谢谢了!!
common-lisp - 重新启动是函数“公共接口”的一部分吗?在 Common Lisp 中?
我一直在尝试通过阅读 Peter Seibel 的超越异常处理:Practical Common Lisp的条件和重启一章、Kent Pitman 的Lisp 语言家族中的条件处理以及其他一些参考资料来了解 Common Lisp 中重启和处理程序的正确使用。
根据我对重新启动的了解,它们是函数向其调用者提供的选项,用于在遇到某些条件时选择函数的行为。
那么,是否应该将重新启动视为函数“公共接口”的一部分,并相应地记录下来?
毕竟,调用者必须知道重新启动以及为了调用它们他们做了什么,对吧?我认为,摆脱调用者可能正在调用的重新启动将是一件坏事。
r - R,框架中的条件系统是什么?
我目前正在使用Advanced R研究 R 中的框架、环境。
但是我不太明白本节的最后一段。
框架还包含使用条件系统创建的退出处理程序
on.exit()
、重新启动和处理程序,以及return()
函数完成时的上下文。这些是 R 代码无法访问的重要内部细节。
我知道统计数据,但我不擅长计算机科学。
另外,我无法按原样阅读本段。
据我了解,
1. 每个框架都包含名为on.exit()
.
2. 本控制器重新启动并控制状态系统。
3. 我什至无法理解如何阅读“以及return()
函数完成时到哪个上下文。”。
总结一下我没有得到的是,
1.以上 3 个句子中有两个是对的吗?
2、第三句是什么意思?“哪个”指的是什么?这句话的动词是什么?
3.什么是“条件系统”?与“条件语句”相同吗?
正如我之前所说,我的cs背景很差。
提前致谢。
error-handling - Common Lisp异常后如何继续正常执行?
我想捕获unbound-variable
异常并避免它们,即时创建一些变量而不会中断执行。我正在尝试在以下代码中使用handler-bind
with :invoke-restart
结果是:
但我想继续执行 second print
,只需将未绑定的变量 xxxx 替换为字符串“XXXX”:
当然,我可以用 包裹语法树中的任何符号handler-bind
,但我担心这会产生巨大的开销。
有没有办法捕获unbound-variable
异常并使用动态生成的值而不是丢失的变量继续执行代码?
lisp - 在常见的 lisp 中,您如何在未捕获错误的地方重新启动?
这个问题实际上是关于我对重新启动缺乏了解。
在编码器中cl-json
存在一个我想使用的诱人宏
with-substitute-printed-representation-restart
但可惜我不太明白怎么做。
这个
返回
这个
发出 UNENCODABLE-VALUE-ERROR 信号
我想从 cl-json 找到函数的那一点重新开始,并让它在遇到我包含在列表中的添加 lambda 时返回我选择的内容。
返回“barf”
我希望它返回
我该如何使用该宏来做到这一点?换句话说,我希望在引发错误的地方而不是在捕获错误的地方重新启动。我可以这样做吗?
lisp - 使用带有状态闭包的处理程序绑定是否有效?
这是一个符合标准的 Common Lisp 程序吗?
SBCL (2.0.5.37) 的输出是:
ABCL/CCL/ECL 的输出是:
Common Lisp 标准定义了哪种行为?
结语
这是 SBCL 中的一个错误,现在已修复。
lisp - GCL中的条件如何处理?
handler-case
是处理 Common Lisp 条件的关键,但 Ubuntu 18.04 上的 GCL 2.6.12 认为它是一个未定义的函数:
对于handler-bind
.
GCL 手册中唯一明显的与处理条件或错误相关的功能是 GCL-specific universal-error-handler
。
在 GCL 中如何处理条件,最好以其他 Lisp 支持的方式?