Seguinte: Variáveis Locais Acima: Funções Anterior: Especialização
Índice remissivo

Lambdas

Como se viu pelo exemplo anterior, para que pudessemos implementar tex2html_wrap_inline3342 em função de acumulatório tivemos de escrever as funções pi/8-seguinte e pi/8-func, cuja utilidade é muito limitada. Elas apenas servem para este exemplo. Por esse motivo, não tem muito sentido estar a defini-las no ambiente do avaliador. O que pretendiamos era tão somente que fosse possível especificar as expressões que aquelas funções calculam, independentemente do nome que se lhes pudesse atribuir.

Para isso, a linguagem Lisp fornece as lambdas. Uma lambda é uma função com todas as características das restantes mas que não está associada a nenhum símbolo. Pode ser vista como uma função sem nome. A sintaxe da lambda é igual à da defun, mas em que se omite o nome.

> ((lambda (z) (+ z 3)) 2)
5

Como se vê, uma lambda pode ser usada onde se usaria uma função. Isto permite simplificar o exercício da aproximação a tex2html_wrap_inline3334 sem ter de definir quaisquer outras funções:

(defun pi (n)
  (* 8 (soma (function (lambda (x) (/ 1.0 (* x (+ x 2)))))
             1
             (function (lambda (x) (+ x 4)))
             n)))

Exercício 25

Imagine uma função f ao longo de um intervalo [a,b]. Essa função deverá apresentar um máximo nesse intervalo, i.e., um valor entre a e b para o qual a função toma o seu valor máximo. Usando o acumulatório, escreva a função maximo-func que recebe uma função e um intervalo e encontra o máximo. Para determinar o maior entre dois número pode usar a função Lisp max. Teste maximo-func para o exemplo tex2html_wrap_inline3354 no intervalo [0,2] com uma tolerância de 0.01.

Resposta

As lambdas são a essência do Lisp. A qualquer função corresponde uma lambda. Na realidade, a forma especial defun não faz mais do que criar uma lambda com os parâmetros e o corpo da função e associá-la ao nome da função que se está a definir. Quando a forma especial function recebe um nome (um símbolo) ela devolve a lambda associada a esse nome.

A designação de lambda ( tex2html_wrap_inline3366 ) deriva duma área da matemática que se dedica ao estudo dos conceitos de função e de aplicação de função, e que se designa por cálculo- tex2html_wrap_inline3366 . O cálculo- tex2html_wrap_inline3366 é uma ferramenta muito utilizada para estudar a semântica das linguagens de programação.

As lambdas possuem ainda muitas outras utilidades para além da mera criação de funções sem nome.


Seguinte: Variáveis Locais Acima: Funções Anterior: Especialização
Índice remissivo

Copyright António Leitão, 1995