LISP - Funções
Uma função é um grupo de instruções que, juntas, executam uma tarefa.
Você pode dividir seu código em funções separadas. Como você divide seu código entre diferentes funções é com você, mas logicamente a divisão geralmente é para que cada função execute uma tarefa específica.
Definindo funções no LISP
A macro chamada defuné usado para definir funções. odefun macro precisa de três argumentos -
- Nome da função
- Parâmetros da função
- Corpo da função
A sintaxe para defun é -
(defun name (parameter-list) "Optional documentation string." body)
Vamos ilustrar o conceito com exemplos simples.
Exemplo 1
Vamos escrever uma função chamada averagenum que imprimirá a média de quatro números. Enviaremos esses números como parâmetros.
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(defun averagenum (n1 n2 n3 n4)
(/ ( + n1 n2 n3 n4) 4)
)
(write(averagenum 10 20 30 40))
Quando você executa o código, ele retorna o seguinte resultado -
25
Exemplo 2
Vamos definir e chamar uma função que calcularia a área de um círculo quando o raio do círculo é dado como argumento.
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(defun area-circle(rad)
"Calculates area of a circle with given radius"
(terpri)
(format t "Radius: ~5f" rad)
(format t "~%Area: ~10f" (* 3.141592 rad rad))
)
(area-circle 10)
Quando você executa o código, ele retorna o seguinte resultado -
Radius: 10.0
Area: 314.1592
Observe que -
Você pode fornecer uma lista vazia como parâmetros, o que significa que a função não leva argumentos, a lista está vazia, escrita como ().
LISP também permite argumentos opcionais, múltiplos e de palavra-chave.
A string de documentação descreve a finalidade da função. Está associado ao nome da função e pode ser obtido usando odocumentation função.
O corpo da função pode consistir em qualquer número de expressões Lisp.
O valor da última expressão no corpo é retornado como o valor da função.
Você também pode retornar um valor da função usando o return-from operador especial.
Vamos discutir os conceitos acima em breve. Clique nos links a seguir para encontrar os detalhes -