[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: condition-case
From: |
Ted Zlatanov |
Subject: |
Re: condition-case |
Date: |
Wed, 15 Dec 2010 10:50:38 -0600 |
User-agent: |
Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) |
On Tue, 14 Dec 2010 23:55:45 -0500 Stefan Monnier <monnier@iro.umontreal.ca>
wrote:
>> ...in other words, in the example you showed, is it just
>> (let ((b a))
>> (lambda () '(b b c)))
SM> Yes. I.e. let the interpreter perform the substitution, at run-time.
OK, so would it work as:
(defmacro handler-case (expression &rest clauses)
"Evaluate expression with `condition-case' and catch errors with CLAUSES.
Longer explanation here..."
(let* ((var (gensym))
(neclause (assoc :NO-ERROR clauses))
(nell (cadr neclause))
(nebody (cddr neclause))
(handlers (mapcar (lambda (clause)
(let ((typespec (car clause))
(clausvar (cadr clause))
(body (cddr clause)))
(cons (if (and (consp typespec)
(eq 'or (car typespec)))
(cdr typespec)
typespec)
(if (null clausvar)
body
(let ((var (car clausvar)))
body)))))
(remove neclause clauses))))
(if neclause
`(condition-case ,var
(multiple-value-bind ,nell ,expression ,@nebody)
,@handlers)
`(condition-case ,var
,expression
,@handlers))))
Does that new `let' that pops the clause need to evaluated? And should
it maybe be a `lexical-let'?
Ted
- Re: condition-case, (continued)
- Re: condition-case, Ted Zlatanov, 2010/12/08
- Re: condition-case, Stefan Monnier, 2010/12/08
- Re: condition-case, Ted Zlatanov, 2010/12/08
- Re: condition-case, Pascal J. Bourguignon, 2010/12/08
- Re: condition-case, Stefan Monnier, 2010/12/09
- Re: condition-case, Ted Zlatanov, 2010/12/10
- Re: condition-case, Stefan Monnier, 2010/12/10
- Re: condition-case, Ted Zlatanov, 2010/12/13
- Re: condition-case, Ted Zlatanov, 2010/12/13
- Re: condition-case, Stefan Monnier, 2010/12/15
- Re: condition-case,
Ted Zlatanov <=
- Re: condition-case, Stefan Monnier, 2010/12/16
- Re: condition-case, Pascal J. Bourguignon, 2010/12/08
- Re: condition-case, Elena, 2010/12/09
- Re: condition-case, Pascal J. Bourguignon, 2010/12/09