|
From: | Leo |
Subject: | Re: Common Lisp like feature expressions (was: How and when to use GCPRO?) |
Date: | Mon, 27 Dec 2010 19:57:55 +0000 |
User-agent: | Gnus/5.13 (Gnus v5.13) Emacs/23.2.91 (Mac OS X 10.6.5) |
On 2010-12-27 19:38 +0000, Andreas Schwab wrote: > Leo <address@hidden> writes: > >> +(defun eval-feature-expression (form) >> + (cond >> + ((atom form) (featurep form nil)) >> + ;; ensure form is a proper list >> + ((condition-case nil >> + (and (length form) nil) > > Nice quadratic behaviour. > > Andreas. How about something like this: (defun eval-feature-expression (form) (cond ((atom form) (featurep form nil)) ((eq (car form) 'not) (not (eval-feature-expression (cadr form)))) ((eq (car form) 'and) (if (not (cdr form)) t (and (eval-feature-expression (cadr form)) (eval-feature-expression (cons 'and (cddr form)))))) ((eq (car form) 'or) (if (not (cdr form)) nil (or (eval-feature-expression (cadr form)) (eval-feature-expression (cons 'or (cddr form)))))) (t (error "Invalid feature expression: %s" form)))) Leo
[Prev in Thread] | Current Thread | [Next in Thread] |