Por isto que vcs manjam pra caramba de lisp são matematicos, imagina quem não é, como fica num papo destes. masp
2009/4/30 Gustavo <[email protected]> > > 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 >> > >> > > >> > >> >> >> > > > > -- Marcelino Pinheiro 11-9177-8622 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
