2009/4/30 Gilzamir Gomes <[email protected]>

>
> Com programação dinâmica, independente de linguagem de programação, é
> possível calcular o fatorial rapidamente. No entanto, um tradeoff em
> ciência da computação é justamente desempenho x consumo de memória. Em
> C, por exemplo, não é difícil programar um tipo de dados de precisão
> arbitrária. No livro Programming Challenges, informações
> bibliográficas em
> http://www.programming-challenges.com/pg.php?page=index), tem
> explicando como fazer isso, acho que no capítulo 5. E linguagens e
> ambientes de desenvolvimento atuais fornecem classes ou tipos de dados
> com precisão arbitrária, como a classe BigInteger em Java.
>
> Eu tenho mostrado como resolver o problema 3n+1 utilizando uma técnica
> que pode ser utilizada para calcular o fatorial de números grandes.
> Melhorou muito o desempenho para o problema 3n+1. Tem que ver como
> adaptar ao cálculo do fatorial. Como posso disponibilizar o arquivo?


Você pode usar o http://paste.lisp.org/ .


>
> Posso simplesmente anexar e enviar para a lista? Vou tentar adicionar
> em algum disco virtual e mandar o link.
>
> Comecei a estudar lisp, mas meu tempo está muito dividido. Atualmente
> progromo em Java, C, C++ e Prolog. Enviei a mensagem porque falava do
> cálculo do fatorial. E eu lembrei que a técnica que utilizei para o
> problema 3n+1 poderia ser utilizada para otimizar o cálculo do
> fatorial. Se vocês acharem que o post está off-topic, ignorem ou
> mandem um aviso.
>
>
>
> Estou treinando uma equipe da Universidade
>
> 2009/4/30 Mario Domenech Goulart <[email protected]>:
> >
> > Alô pessoal.
> >
> > On Thu, 30 Apr 2009 00:36:22 -0700 (PDT) namekuseijin <
> [email protected]> wrote:
> >
> >> Muito bom e exaustivo por sinal
> >
> > Passando os olhos rapidamente, não vi algumas possibilidades de cálculo
> > de fatorial bem simples com Lisp (usando 10! nos exemplos e Chicken
> > Scheme -- http://www.call-with-current-continuation.org).
> >
> > O fatorial de 10 é (* 10 9 8 7 6 5 4 3 2):
> >
> > $ cat eval-fact.scm
> > #! /usr/bin/csi -s
> >
> > (use numbers srfi-1)
> >
> > (print (eval `(* . ,(iota 10 1))))
> >
> > $ ./eval-fact.scm
> > 3628800
> >
> >
> > Chicken possui uma limitação quanto ao número de argumentos que
> > procedimentos podem receber (normalmente 1000).  Assim, para fatorial de
> > números maiores que 1000 essa estratégia não funciona.  Mas pode-ser
> > usar `reduce':
> >
> > $ cat reduce-fact.scm
> > #!/usr/bin/csi -s
> >
> > (use numbers srfi-1)
> >
> > (print (reduce * '() (iota 10 1)))
> >
> >
> > $ ./reduce-fact.scm
> > 3628800
> >
> >
> > Ou, ainda (apelando para a malandragem), fazendo parte do trabalho em
> > tempo de compilação. :-)
> >
> > $ cat macro-fact.scm
> > #!/usr/bin/csi -script
> >
> > (use numbers srfi-1)
> >
> > (define-macro (fact n)
> >  `,(reduce * '() (iota n 1)))
> >
> > (print (fact 10))
> >
> > $ ./macro-fact.scm
> > 3628800
> >
> >
> > Um abraço.
> > Mario
> >
> > >
> >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lisp-br" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/lisp-br?hl=en
-~----------~----~----~----~------~----~------~--~---

Responder a