#NEWLINE# def variables( self ) : #NEWLINE# #INDENT# "\n        Return a set of all the variables for binding substitution.\n        The variables returned include all free (non-bound) individual\n        variables and any variable starting with '?' or '@'.\n        :return: set of ``Variable`` objects\n        " #NEWLINE# return ( self . free ( ) | set ( ( self for p in ( self . predicates ( ) | self . constants ( ) ) if re . match ( '^[?@]' , p . name ) ) ) )