essentials of programming languages - Friedman, Daniel P (PHI Learning, 2009)