emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Common Lisp like feature expressions (was: How and when to use GCPRO


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]