Julia is first and foremost a functional language because computations and data transformations are done through functions; they are first-class citizens in Julia. Programs are structured around defining functions and to overload them for different combinations of argument types. This chapter discusses this keystone concept, covering the following topics:
- Defining functions
 - Optional and keyword arguments
 - Anonymous functions
 - First-class functions and closures
 - Recursive functions
 - Broadcasting
 - Map, filter, and list comprehensions
 - Generic functions and multiple dispatch