The &
and |
logical operators do short-circuit logic.
That is, they stop processing their arguments when it’s clear what the
result of the operation will be. For instance, if one of the arguments
of an &
evaluates to false
, there’s no point in evaluating
the rest of the arguments. This means that you should put slow matches
(‘body’, ‘header’) last and quick matches (‘from’,
‘subject’) first.
The indirection arguments (1-
and so on) will make their
arguments work on previous generations of the thread. If you say
something like:
... (1- (1- ("from" "lars"))) ...
Then that means “score on the from header of the grandparent of the current article”. An indirection is quite fast, but it’s better to say:
(1- (& ("from" "Lars") ("subject" "Gnus")))
than it is to say:
(& (1- ("from" "Lars")) (1- ("subject" "Gnus")))