Tomas Lozano-Perez (tlp@ai.mit.edu)
Mon, 9 Mar 1998 18:07:07 -0500 (EST)

Sorry to keep bombarding you with messages, but...

It looks like some people think that ?any has "special" significance.
It doesn't. Variables can have any name, but two variables with the
same name must have the same value even if the name is "any". So the

(:grule (Det ?any) (N ?any) -> (NP ?any))

is equivalent to

(:grule (Det ?agr) (N ?agr) -> (NP ?agr))

In both cases, it enforces agreement on the argument of Det and N. If
we didn't care about agreement, we could do

(:grule (Det ?a) (N ?b) -> (NP ?c))

The backward chainer does support an anonymous variable ?_

(:grule (Det ?_) (N ?_) -> (NP ?_))

says, for example, that no agreement is expected without bothering to
make up different variable names. The ?_ will match anything without
remembering the value. So, the rule with ?_ is exactly equivalent to

(:grule (Det ?a) (N ?b) -> (NP ?c))