[Top][All Lists]

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

[Logs-devel] questions

From: Vijay Lakshminarayanan
Subject: [Logs-devel] questions
Date: Tue, 23 May 2006 02:09:17 -0500

Hi Jim

A few random questions about LoGS.  These are just questions that
occured to me when reading the code.  If they're irrelevant,
fundamentally wrong (because of my poor understanding of lisp etc.),
there's actually a good reason behind the current scheme (no pun
intended), or something else where my question is unnecessary, feel
free to ignore it.

First off, what I feel is a peep-hole optimization:

Why is the LoGS-debug macro defined as
(defmacro LoGS-debug (message &rest rest)
 `(when +debug+
    (format t ,message ,@rest)))

and not

(defmacro LoGS-debug (message &rest rest)
 `(when ,+debug+                       ; notice the comma
    (format t ,message ,@rest)))


I think you meant:

!        (when matches
!          (let ((sub-matches (copy-array-add-zeroeth-element
sub-matches matches)))
!            (unless (eql (length sub-matches) (length binding-list))
!              (error "binding and match length mis-match~%"))

+      (when matches
+        (let ((sub-matches (if use-full-match
+                               (copy-array-add-zeroeth-element
+                                sub-matches matches)
+                               sub-matches)))
+          (unless (eql (length sub-matches) (length binding-list))
+                (error "binding and match length mis-match ~A ~A~%"
+                       sub-matches binding-list))

btw, how do you use this function?

I tried
(let* ((message (make-instance 'message :message "one(two)(three)four"))
      (rule (make-instance
             :match (match-regexp-binding-list "one(two)(three)four" '($1 $2))
             (lambda (message matches sub-matches)
               (declare (ignore message matches sub-matches))
               (format t "at least it matched.")
               ;; How do I refer to that $1 and $2 above?
               (list (list '$1 '$2)))))
      (ruleset (make-instance 'ruleset)))
 (enqueue ruleset rule)
 (check-rule ruleset message))

Why doesn't this match?  And how do I use the bindings made?

This question is _really_ nitpicking, but I'm curious: Why are the
defgenerics for CHECK-RULE and CHECK-RULES the exact opposite in

(defgeneric check-rule  (rule    message)) and
(defgeneric check-rules (message ruleset))

I have some more.  I'll ask them later.

I also have an incomplete mail in which I'm comparing SEC rules vs
LoGS rules.  Before I actually finish writing all of that and getting
to work on the macro ideas I have (most of which you've already
implemented in Parlance.lisp).

Will get back with more.

Vijay Lakshminarayanan

reply via email to

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