smart.expression is an S expression for 
  a smart function to call itself. It is best if you go through it line
  by line, but most users will not need to know anything about it. 
  It requires the primary argument of the smart function to be called
  "x".
The list component match.call must be assigned the 
  value of match.call() in the smart function; this is so
  that the smart function can call itself later.