lisp里的状况处理

lisp里面的异常处理采用的是condition system,下面是这个condition system的演示:



最简单的


[1]> (/ 1 0)

*** - /: division by zero
The following restarts are available:
ABORT          :R1      Abort main loop
Break 1 [2]> :R1

[3]>


这个是被零除状况,运行时发现这个状况,提示有ABORT重启可以选择,选择这个重启退出.下面有添加自定义的重启的例子.


捕捉状况并处理

[3]> (handler-case (/ 1 0) (error () "Dived by 0"))
"Dived by 0"


添加自定义启动

[4]> (restart-case (/ 1 0) (r () "Restart R") (rr () "Restart RR") )

*** - /: division by zero
The following restarts are available:
R              :R1      R
RR             :R2      RR
ABORT          :R3      Abort main loop
Break 1 [5]> :R2
"Restart RR"



这里定义了R RR这两个重启,lisp可以定义多个重启,对一种状况可以采用多种恢复方案.


状况处理选择自定义启动


Break 2 [8]> (handler-bind ((error #'(lambda (c) (invoke-restart 'rr)))) (restart-case (/ 1 0) (r () "Restart R") (rr () "Restart RR")))
"Restart RR"








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值