Our objective is to gain an understanding of the principles of functional programming, in which computation is viewed as the evaluation of functions with distinctly mathematical properties. We will gain a better appreciation of recursion as a programming technique, the use of mathematical logic to establish the correctness of programs, and see how to build simple concurrent and distributed systems using the unique advantages of functional languages. We will also study the purely declarative construction of elementary data types.



Programming Elixir 1.3  by Dave Thomas (required) Also at B&N, AbeBooks and Safari (eBook)
Erlang Programming: Software for a Concurrent World, 2nd Ed. by Joe Armstrong (recommended/on reserve)

Administrative Handouts

Stephen P. Carl