【问题标题】:How can conditions be handled in GCL?GCL中的条件如何处理?
【发布时间】:2021-07-01 08:01:24
【问题描述】:

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.                                                    
>>

handler-bind 也是如此。

在 GCL 手册中唯一明显的与处理条件或错误相关的功能是 GCL 特定的universal-error-handler

如何在 GCL 中处理条件,最好以其他 Lisps 支持的方式处理?

【问题讨论】:

    标签: lisp common-lisp gnu-common-lisp ansi-common-lisp condition-system


    【解决方案1】:

    项目的README.Debian说明情况:

    [...] 在 GCL 首次发布时生效的 common lisp 标准被称为“Common Lisp, the Language”(CLtL1),源于 Steele 的同名书提供了该规范。随后,美国国家标准协会 (ANSI) 采用了一个扩展得多的标准,至今仍被认为是权威的通用 lisp 语言规范。

    [...]

    要切换使用 ANSI 图像,请将环境变量 GCL_ANSI 设置为任何非空字符串。

    This Debian bug 有更多信息。)

    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 2016
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 2019-08-29
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多