Functions in Lumen are values, just like numbers and strings. Expressions that start with fn evaluate to functions:


Functions can be called by placing them first in a list expression. The list that appears after the name fn identifies the function's parameters:


Because functions are values, we can use variables to name them. The same rules apply when calling a function named by a variable:


The most common shortcut for defining functions is to use define and define-global in the following way:


A function's parameter list can contain both positional and key parameters, where the key's value is the name to bind:


Parameters in Lumen are always optional, and those without a supplied argument have the value nil.

Functions can also take a variable number of arguments by either specifying a single parameter instead of a list, or by using the rest key.