lambda, lambda, lambda!!! meu caro nerd!!! hehehe
alguem ja percebeu que as vezes uso a função LAMBDA para definir subrotinas? esta é uma das utilidades dela... porque: muitas vezes, quando temos um programa mais complexo, precisamos dividir o código, ou se temos uma seqüência de ações que devem ser executadas, por que não simplificar elas com uma subrotina. A vantagem disso, é que só usaremos esta subrotina dentro do nosso programa, logo ela não existtirá mais tão logo a rotina termine sua execução, assim como as variáveis locais, obviamente que teremos de declarar a variável que receber a função lambda nos parâmetros do DEFUN, exemplo:
(defun c:teste (/ fun)
(setq fun (lambda (a)(* a a)))
(fun 10)) ;retorna 100
(fun 10);causa erro de função indefinida...
ao executar a rotina teste, obtemos o número 100 na linha de comando, já se tentamos usar a função "FUN" que usamos dentro dela, obteremos um erro de função indefinida. Isto porque esta função só existe dendro da rotina TESTE e é "destruída" assim que a rotina TESTE termina.
Utilidade: não sobreescrevemos subrotinas mais importantes, que serão usadas por outras rotinas nossas ou de terceiros...
muitas pessoas compilam seus programas em VLX pensando estar seguros, mas não utilizam o "SEPARATE NAMESPACE" (ainda vou falar um pouco dele) e as vezes o usuário carrega uma rotina qualquer que simplesmente faz a rotina VLX parar de funcionar sem razão aparente... vai ver, ele sobreescreveu as subrotinas...
Nenhum comentário:
Postar um comentário