Elements of Programming by Alexander Stepanov & Paul McJones