This version can be used to create predicates whose name is not a valid 
C++ identifier. Here is a ---hypothetical--- example, which unifies the 
second argument with a stringified version of the first. The cname 
is used to create a name for the functions. The concrete name does not 
matter, but must be unique. Typically it is a descriptive name using the 
limitations imposed by C++ indentifiers.
    NAMED_PREDICATE("#", hash, 2)
    { return A2.unify_string(A1.as_string());
    }