在通用Lisp中,handler-case是处理条件的关键,但是Ubuntu18.04上的GCL2.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.
>>handler-bind也是如此。
在GCL手册中,与处理条件或错误相关的唯一功能是特定于GCL的universal-error-handler。
如何在GCL中处理条件,最好是以其他Lisps支持的方式处理?
发布于 2021-07-01 08:01:24
这种情况在项目的README.Debian中作了解释
..。GCL第一次发布时有效的通用Lisp标准被称为"Common,语言“(CLtL1),它是由同名的Steele编写的一本提供此规范的书。随后,美国国家标准协会(ANSI)采用了一种扩展性很强的标准,至今仍被认为是最终的通用lisp语言规范。
..。
若要切换ANSI映像的使用,请将环境变量GCL_ANSI设置为任何非空字符串。
(这个Debian错误有一些更多的信息。)
handler-case需要ANSI支持,因此在基于Debian的系统中,GCL需要使用GCL_ANSI环境变量集启动;例如:
$ GCL_ANSI=1 gcl要反映更改,启动消息的第一行更改如下:
GCL (GNU Common Lisp) 2.6.12 CLtL1 Fri Apr 22 15:51:11 UTC 2016至:
GCL (GNU Common Lisp) 2.6.12 ANSI Fri Apr 22 15:51:11 UTC 2016https://stackoverflow.com/questions/68206447
复制相似问题