Essentials Of Programming Languages by Daniel P. Friedman, Daniel P. Friedeman & Mitchell Wand