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 -

  • Parâmetros Opcionais

  • Parâmetros de repouso

  • Parâmetros de palavra-chave

  • Retornando valores de uma função

  • Funções Lambda

  • Funções de mapeamento