wide variety of complicated circumstances. There is a difference between calling a program smart and calling it intelligent; in particular, there do not exist any intelligent programs (yet --- see AI-complete). Compare robust (smart programs can be brittle).