Seguinte: Parâmetros de Resto Acima: Parâmetros Especiais Anterior: Parâmetros Especiais
Índice remissivo

Parâmetros Opcionais

Como referimos anteriormente, a forma especial return, que se pode utilizar dentro de um loop, possui um parâmetro opcional, que é o valor a retornar do ciclo. Isto quer dizer que o argumento que deveremos passar para esse parâmetro pode ser omitido. Esta característica é também muito útil para a definição de funções, permitindo que ela possa assumir certos parâmetros por omissão.

Para definirmos funções que têm parâmetros opcionais temos de usar um qualificador especial designado &optional na lista de parâmetros formais. Esse qualificador indica que todos os parâmetros que se lhe seguem são opcionais e que, se os argumentos correspondentes forem omitidos, eles valem nil. Se pretendermos um valor diferente para um parâmetro, podemos inserir o parâmetro numa lista com o seu valor. A seguinte função mostra como se pode definir a função incr que incrementa o seu argumento de uma unidade, ou de uma quantidade que lhe seja fornecida.

(defun incr (x &optional (i 1))
  (+ x i))

> (incr 10) 11 > (incr 10 5) 15

Exercício 65

Defina a função eleva, que eleva um número a uma determinada potência. Se a potência não for indicada deverá ser considerada 2. Nota: a expressão (expt x y) determina a potência y de x, i.e., tex2html_wrap_inline3519 .

Resposta

Os parâmetros opcionais permitem ainda simplificar a escrita de processos iterativos, ao aumentarem o número de variáveis de estado sem obrigar o utilizador a inicializá-las. No entanto, é usual considerar-se esta utilização como mau estilo de programação.

Exercício 66

Reescreva a função factorial de forma a gerar um processo iterativo mas sem usar funções auxiliares.

Resposta



Copyright António Leitão, 1995