Funções em Clojure


Clojure é uma linguagem funcional onde as funções são de primeira classe.

A maior parte do código em Clojure é composta por funções puras, o que significa que não geram efeitos colaterais.

O nome atribuído a uma função é um símbolo que aponta para o objeto da função.

Definição de Funções (defn)

A macro defn é utilizada para definir e nomear uma função global no namespace atual.

A estrutura básica de uma definição segue o padrão:

(defn nome [parâmetros] corpo)
  • Nome: Um identificador para a função.
  • Parâmetros: Um vetor contendo zero ou mais identificadores que receberão os valores de entrada.
  • Corpo: A expressão ou conjunto de expressões que definem a lógica e o valor de retorno da função.
  • Exemplo de definição: (defn greet [name] (str "Hello, " name)).

Invocação de Funções

A execução de uma função ocorre através da avaliação de uma lista onde o identificador da função ocupa a posição de comando.

NOTE

A posição de comando (posição inicial) é tecnicamente chamada de function position.

Para invocar uma função, coloca-se o seu nome (ou a expressão que resulta na função) como o primeiro elemento de uma lista, seguido pelos seus argumentos.

Exemplo de invocação:

(greet "students")

Onde greet é a função e "students" (uma String) é o argumento.

NOTE

O processo de leitura desta estrutura é realizado pelo Clojure Reader antes da compilação.

Referências


https://clojure.org/guides/learn/functions#_creating_functions