Essentials Of Programming Languages by Daniel P Friedman