If you prefer hands-on learning, How to Design Programs is pretty good resource for the foundations, with lots of examples and exercises: https://htdp.org
But learning the basics of lisp is more like a side effect, the focus is on program design.
But learning the basics of lisp is more like a side effect, the focus is on program design.