tan*_*gle 3 lisp common-lisp gnu-common-lisp condition-system ansi-common-lisp
handler-case 是在 Common Lisp 中处理条件的关键,但 Ubuntu 18.04 上的 GCL 2.6.12 认为它是一个未定义的函数:
>(handler-case (error "test") (error (condition) condition))
Error: UNDEFINED-FUNCTION :NAME HANDLER-CASE
Fast links are on: do (si::use-fast-links nil) for debugging
Signalled by EVAL.
UNDEFINED-FUNCTION :NAME HANDLER-CASE
Broken at EVAL. Type :H for Help.
1 Return to top level.
>>
Run Code Online (Sandbox Code Playgroud)
对于 也是如此handler-bind。
GCL 手册中唯一与处理条件或错误相关的函数是 GCL 特定的universal-error-handler.
如何在 GCL 中处理条件,最好以其他 Lisps 支持的方式处理?
这种情况在项目的README.Debian:
[...] 在第一次发布 GCL 时生效的通用 lisp 标准被称为“通用 Lisp,语言”(CLtL1),这是根据 Steele 的一本同名提供此规范的书。随后,美国国家标准协会 (ANSI) 采用了一个大大扩展的标准,该标准至今仍被认为是权威的通用 lisp 语言规范。
[...]
要切换 ANSI 映像的使用,请将环境变量 GCL_ANSI 设置为任何非空字符串。
(这个 Debian 错误有更多信息。)
handler-case需要ANSI支持,所以在基于Debian的系统上,GCL需要GCL_ANSI设置环境变量启动;例如:
$ GCL_ANSI=1 gcl
Run Code Online (Sandbox Code Playgroud)
为了反映更改,启动消息的第一行更改为:
GCL (GNU Common Lisp) 2.6.12 CLtL1 Fri Apr 22 15:51:11 UTC 2016
Run Code Online (Sandbox Code Playgroud)
到:
GCL (GNU Common Lisp) 2.6.12 ANSI Fri Apr 22 15:51:11 UTC 2016
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |