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"

时间: 2016-01-07
Tags: lisp

lisp里的状况处理的相关文章

lisp开发http开发探险记录(启航)

这次选择slime+sbcl+emacs+quicklisp作为探险的装备,Hunchentoot作为起点 Huncentoot Huncentoot是一个http server. ; SLIME 2015-12-13 CL-USER> (ql:quickload "hunchentoot") To load "hunchentoot":   Load 1 ASDF system:     hunchentoot ; Loading "hunchen

谷歌CEO拉里·佩奇确已失声 仍继续执掌公司

谷歌公司表示,近来因病失声的首席执行官(CEO)佩奇仍在继续执掌公司,而且仍然参与所有战略决策. 谷歌周四宣布,该公司2012财年第二季度营收(扣除了26亿美元的流量获取成本以及摩托罗拉移动的营收)达83.6亿美元.而按非美国通用会计准则(Non-GAAP)计算的每股收益为10.12美元.分析师平均预期该公司销售收入为84.1亿美元,每股收益为10.04美元. 盈利超预期以及付费点击率攀升足以促使谷歌股价在盘后交易时段最高上涨3%,至610.51美元. 谷歌网站营收同比增长21%,而其合作伙伴网

Unix 的缺陷 - 王垠

我想通过这篇文章解释一下我对 Unix 哲学本质的理解.我虽然指出 Unix 的一个设计问题,但目的并不是打击人们对 Unix 的兴趣.虽然 Unix 在基础概念上有一个挺严重的问题,但是经过多年的发展之后,这个问题恐怕已经被各种别的因素所弥补(比如大量的人力).但是如果开始正视这个问题,我们也许就可以缓慢的改善系统的结构,从而使得它用起来更加高效,方便和安全,那又未尝不可.同时也希望这里对 Unix 命令本质的阐述能帮助人迅速的掌握 Unix,灵活的应用它的潜力,避免它的缺点. 通常所说的"U

手工清理电脑,提高电脑运行速度的方法

随着系统使用的时间,系统的运行速度也会越来越慢,怎么提高电脑运行速度呢?本文为大家介绍一些清理电脑的方法. 1.双击"我的电脑" 2.右键点C盘 3.点"属性" 4.点"磁盘清理" 5.点"确定" 6.再点"是" 7.再点"确定". 8.清理过程中,您可看得到未经您许可(您可点"查看文件"看,就知道了)进来的"临时文件"被清除了,盘的空间多了.对D

嫌弃电脑网速太慢?教你如何清洗

你必须学会清洗电脑-提网速     一.每天关机前清洗 1.双击"我的电脑" 2.右键点C盘 3.点"属性" 4.点"磁盘清理" 5.点"确定" 6.再点"是" 7.再点"确定". 8.清理过程中,您可看得到未经您许可(您可点"查看文件"看,就知道了)进来的"临时文件"被清除了,盘的空间多了.对D,E,F盘也用此法进行. 二.随时进行清理 1.打开

【转】奇文共欣赏,疑义相与析:原文转载《电脑维护技巧》(N条举措N条理由)并请大家交流研讨

    以下转载的这篇大作,是我见过的有关<电脑维护技巧>举措中最为"全面"的一篇.不过,"全面"未必全有道理:其中所列有的有利于电脑运行,有的对运行未必有什么作用,有的甚至会有"反作用".因此,对此大作应当辨证分析"去伪存真".如此评价,丝毫没有对原作不恭不敬之意.毕竟写下几千字还是付出了辛苦,毕竟对于引发大家思考进而交流研讨还是有一定价值的.下面原文转载如下-- 一.每天关机前要做的清洗:     双击&quo

详解Clojure的递归(上)—— 直接递归及优化

    详解clojure递归(上)     详解clojure递归(下)     递归可以说是LISP的灵魂之一,通过递归可以简洁地描述数学公式.函数调用,Clojure是LISP的方言,同样需要递归来扮演重要作用.递归的价值在于可以让你的思维以what的形式思考,而无需考虑how,你写出来的代码就是数学公式,就是函数的描述,一切显得直观和透明.如果你不习惯递归,那只是因为命令式语言的思维根深蒂固,如x=x+1这样的表达式,从数学的角度来看完全不合法,但是在命令式语言里却是合法的赋值语句.  

Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法_javascript技巧

What?模态对话框失效了? 上个礼拜修改测试一个后台管理项目,在测试与各个浏览器兼容性的时候,发现在chrome浏览器下showModalDialog方法显示的并不是模态对话框,就像新打开一个页面一样,父窗口仍然可以随意获取焦点,并可以打开多个窗体,而且返回值returnValue也无法返回,一直是undefined.这么多问题很令人头疼,下面就各个主流最新版的浏览器进行了一下测试. 浏览器 是否支持 状态 IE9 ○ Firefox13.0 ○ safari5.1 ○ chrome19.0

阿里云发布性能测试服务助开发者提前预知网站承载力

6日,阿里云计算发布http://www.aliyun.com/zixun/aggregation/14356.html">性能测试服务PTS(PerformanceTestService),帮助开发者通过分布式并发压力测试,模拟指定区域和指定数量的用户同时访问,提前预知网站承载力.利用该服务,开发者一方面可以找到自身网站或APP系统性能的瓶颈从而进行优化,另一方面可以充分了解系统性能指标,便于未来扩容. 性能测试服务是集测试机管理.测试脚本管理.测试场景管理.测试任务管理.测试结果管理为