7.15.1 Advanced Scoring Syntax

Ordinary scoring rules have a string as the first element in the rule.
Advanced scoring rules have a list as the first element. The second
element is the score to be applied if the first element evaluated to a
non-nil value.

These lists may consist of three logical operators, one redirection
operator, and various match operators.

Logical operators:

&

and

This logical operator will evaluate each of its arguments until it finds
one that evaluates to false, and then it'll stop. If all arguments
evaluate to true values, then this operator will return
true.

|

or

This logical operator will evaluate each of its arguments until it finds
one that evaluates to true. If no arguments are true,
then this operator will return false.

!

not

¬

This logical operator only takes a single argument. It returns the
logical negation of the value of its argument.

There is an indirection operator that will make its arguments
apply to the ancestors of the current article being scored. For
instance, 1- will make score rules apply to the parent of the
current article. 2- will make score rules apply to the
grandparent of the current article. Alternatively, you can write
^^, where the number of ^s (carets) says how far back into
the ancestry you want to go.

Finally, we have the match operators. These are the ones that do the
real work. Match operators are header name strings followed by a match
and a match type. A typical match operator looks like ‘("from"
"Lars Ingebrigtsen" s)’. The header names are the same as when using
simple scoring, and the match types are also the same.