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