Si termina, lo que no estaría bien es que -10 factorial devolvería 1 cuando el factorial de -10 no esta definido,según recuerdo, matemáticamente. Lo único que tiene mal el método (por si querés probarlo) de Diego es el punto al final del ifTrue: []
Saludos, Facundo 2010/9/15 Guillermo Schwarz <[email protected]> > Off topic, pero tu algoritmo no termina si se le pasa un número > negativo... > > factorial > "Returns the factorial of the receiver." > > ^self <= 0 > ifTrue: [1]. > ifFalse: [self * (self - 1) factorial]. > > Para comparar las soluciones en distintos lenguajes habría que hacer un > benchmark. Esos benchmarks existen, no veo la razón para hacerlos de nuevo > acá. Gana SML siempre. > > Una de las optimizaciones que hacen los compiladores se llama tail > recursion elimination y consiste en que la llamada recursiva final se > reemplaza por un goto al principio del método. > > ¿Porqué sería tan importante la velocidad en RAM? > > En la práctica la velocidad de acceso a disco lo domina todo. Un disco más > rápido hace toda la diferencia y hasta el momento los SSD son los más > rápidos. > > Saludos, > Guillermo. > > > > On Mon, 2010-09-13 at 06:45 -0700, [email protected] wrote: > > Hay varias implementaciones de factorial, pero la que haría un > > Smalltalker, al menos inicialmente, sería: > > > > factorial > > "Returns the factorial of the receiver." > > > > ^self = 0 > > ifTrue: [1]. > > ifFalse: [self * (self - 1) factorial]. > > > > Esta implementación, con mucho por mejorar sigue siendo rápida y > > "esconde" cosas que en otros lenguajes son evidentes y complejas. Como > > decías el GC es importante , otra cosa es el operador "*", que podría > > ejecutarse en distintas clases según el tamaño del receptor, gracias > > el carácter dinámico de Smalltalk y a que los números son objetos. > > Quienes además conocen la implementación interna de Smalltalk, como > > vos, tal vez puedan agregar muchos detalles de la implementación de > > todo esto. Pero tal vez, lo que hace rápido en Smalltalk, es que un > > ignorante (como yo) puede hacer algo rápido y de forma muy natural y > > obvia. > > > > Yo pondría el esfuerzo por hacer algo rápido como parte de la > > comparación entre lenguajes. Porque hay esfuerzos que son > > impracticables, entonces en la práctica no se hacen y terminan como > > sistemas lentos en C/C++. Cargar una librería C solo sirve para lo ya > > resuelto, sería bueno saber cuánto esfuerzo requiere hacer esa > > librería C (en Smaltalk escribir #factorial llevaría 2 líneas si no > > estuviera hecho). > > > > Diego Coronel > > > > On Sep 10, 8:24 pm, Andres Valloud <[email protected]> wrote: > > > En general menciono a JP Morgan porque trabaje ahi, pero Cincom tiene > > > pila de bancos de clientes... > > > > > > Calcular 10000 factorial simplemente mide > > > > > > a) la velocidad de la primitiva que multiplica large integers (que en > > > general se implementa con el algoritmo simple de la primaria porque es > > > rapido para numeros chicos, asi que cuando se usa con numeros > > > gigantescos entonces no es tan bueno, ver por ejemplohttp:// > blogten.blogspot.com/2008/07/mr-karatsuba.htmly similares), > > > > > > b) la velocidad de la implementacion de factorial, que en general es > > > algo asi como > > > > > > | answer | > > > self < 0 ifTrue: [self error]. > > > self < 2 ifTrue: [^1]. > > > answer := 1. > > > 2 to: self do: [:each | answer := answer * each]. > > > ^answer > > > > > > y que en general es mas o menos la peor manera posible de implementar > > > factorial para argumentos grandes. Por ejemplo, es muchisimo usar la > > > propiedad asociativa recursivamente y calcular > > > > > > (1*2) * (3*4) * ... (9999 * 10000) > > > > > > y luego > > > > > > ((1*2) * (3*4)) * ((5*6) * (7*8)) * ... > > > > > > y asi hasta llegar al resultado. Pero eso no se dice... > > > > > > c) calcular 10000 factorial en C?... vas a necesitar GMP, pero esa es > > > una libreria dedicada a numeros grandes, en vez de un lenguaje pensado > > > para uso general sin objetivos demasiado especificos. Por algo GMP no > > > viene standard en C. Pero entonces no estamos comparando la misma > > > cosa... > > > > > > d) ademas, en Smalltalk vas a tener que incluir la comparacion del > > > garbage collect de los resultados intermedios contra el garbage > > > collect (manual o automatico) de los resultados intermedios en otro > > > lenguaje... no es tan facil comparar. > > > > > > Andres. > > > > > > 2010/9/10 [email protected] <[email protected]>: > > > > > > > > > > > > > Gabriel, > > > > Disculpame si lo dije mal, el punto es que siempre parece que se > apela > > > > a JPMorgan para mostrar que Smalltalk se usa (yo lo hago a veces). Y > > > > como he hecho sistemas para bancos en Smalltalk, Java y Visual Basic, > > > > no me termina de convencer como argumento válido. Mucho mas cuando la > > > > estrella de los sistemas bancarios suele ser Cobol, y a buena honra. > > > > Igual puede que tengas razón en este punto. > > > > > > > Respecto a la lentitud no estoy de acuerdo, creo que es un tema de > > > > definir qué es velocidad. Si velocidad es cronometraer un loop, > > > > entonces lo mas rápido es agarrar una pila y conectar un cable entre > > > > los polos. Pero de qué sirven los test sobre torres de hanoi? son > > > > útiles para cosas muy básicas, pero con un mínimo de complejidad (muy > > > > poco) se hace inútil la velocidad de ejecución de instrucciones y > > > > pasan a ser mucho mas importantes otras cosas, como la administración > > > > de memoria por ejemplo. Y con un poquitito mas de complejidad pasan a > > > > ser mas importantes la capacidad de abstracción y lidiar con la > > > > complejidad. Y digo mas importantes desde el punto de vista de > > > > velocidad. Evaluar 10000 factorial es una prueba de todo eso (es la > > > > prueba de Smalltalk que mas me gusta). > > > > > > > Yo tengo un sistema de inteligencia de negocios por ejemplo, que hace > > > > cosas muchisimo mas rápido que cualquier base de datos programadas en > > > > C. Y son cosas que solo puedo hacer en Smalltalk, en cualquier otra > > > > cosa serían impracticables. Saludos. > > > > > > > Diego > > > > > > > On Sep 10, 3:46 pm, Gabriel Brunstein <[email protected]> wrote: > > > >> Diego, yo fui el que di esos ejemplos, porque me pareció adecuado > decir que > > > >> en la empresa en donde trabajo hacemos software para esos bancos que > son > > > >> importantes. Lo dije como ejemplo de software complejos y "serios", > ya que > > > >> alguien ahí opinaba que en Smalltalk no se puede hacer algo así. > > > >> Con respecto a la lentitud, que acaso hay que mentir? Smalltalk > suele > > > >> consumir más recursos que C++ por ejemplo, lo que hay que ver es > cuando es > > > >> crítico ese factor y cuando no... > > > >> Igualmente son solo opiniones. > > > >> Saludos. > > > > > > >> 2010/9/10 [email protected] <[email protected]> > > > > > > >> > Hay que reconocer que el tipo ese que habla mal de Smalltalk > conoce > > > >> > algo, sabe lo que es VisualWorks o Seaside. Yo no sabría ni a qué > > > >> > compilador de C o Java pegarle hoy en día. Lo mas típico de esos > foros > > > >> > es ver como los amantes de Smalltalk lo entierran diciendo que es > > > >> > lento o que lo usa tal o cual banco. También coincido que con > > > >> > Smalltalk no se puede hacer nada serio, y supongo que es el motivo > por > > > >> > el que estoy en esto. > > > > > > >> > Diego > > > > > > >> > On Sep 10, 2:14 pm, Jose Gregoris <[email protected]> > wrote: > > > >> > > da la cara vengador enmascarado aahhahah > > > > > > >> > > --- El vie 10-sep-10, Jose Gregoris <[email protected]> > escribió: > > > > > > >> > > De: Jose Gregoris <[email protected]> > > > >> > > Asunto: Re: [clubSmalltalk] Smalltalk en ADVA > > > >> > > Para: [email protected] > > > >> > > Fecha: viernes, 10 de septiembre de 2010, 16:03 > > > > > > >> > > Hola gente , Esteban > > > > > > >> > > no se pierdan los últimos comentarios ahahahha > > > >> > > es para descostillarse ahahahah. Alguien que usa ST contesto > al estilo > > > >> > diego y es genial ahhahahah. > > > >> > > Hace rato no me reía así ahahhahha > > > > > > >> > > saludos > > > > > > >> > > --- El vie 10-sep-10, Esteban A. Maringolo < > [email protected]> > > > >> > escribió: > > > > > > >> > > De: Esteban A. Maringolo <[email protected]> > > > >> > > Asunto: Re: [clubSmalltalk] Smalltalk en ADVA > > > >> > > Para: [email protected] > > > >> > > Fecha: viernes, 10 de septiembre de 2010, 14:25 > > > > > > >> > > Kiko: > > > > > > >> > > No te gastes... cada cual tiene con qué programar a su gusto. > > > >> > > Por suerte existe Smalltalk. > > > > > > >> > > Saludos! > > > > > > >> > > Esteban A. Maringolo > > > > > > >> > > -- > > > >> > > To post to this group, send > > > >> > > email to [email protected] > > > >> > > To unsubscribe from this group, send email to > > > >> > [email protected]<clubsmalltalk%[email protected]> > <clubsmalltalk%2bunsubscr...@googlegroups.com> > > > > > > >> > >http://www.clubSmalltalk.org > > > > > > >> > > -- > > > > > > >> > > To post to this group, send email to > [email protected] > > > > > > >> > > To unsubscribe from this group, send email to > > > >> > [email protected]<clubsmalltalk%[email protected]> > <clubsmalltalk%2bunsubscr...@googlegroups.com> > > > > > > >> > >http://www.clubSmalltalk.org > > > > > > >> > -- > > > >> > To post to this group, send email to > [email protected] > > > >> > To unsubscribe from this group, send email to > > > >> > [email protected]<clubsmalltalk%[email protected]> > <clubsmalltalk%2bunsubscr...@googlegroups.com> > > > > > > >> >http://www.clubSmalltalk.org-Hide quoted text - > > > > > > >> - Show quoted text - > > > > > > > -- > > > > To post to this group, send email to [email protected] > > > > To unsubscribe from this group, send email to > [email protected]<clubsmalltalk%[email protected]> > > > > > > >http://www.clubSmalltalk.org- Hide quoted text - > > > > > > - Show quoted text - > > > > -- > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to > [email protected]<clubsmalltalk%[email protected]> > > > > http://www.clubSmalltalk.org > > -- > Simplex Veri Sigillum > > -- > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<clubsmalltalk%[email protected]> > > http://www.clubSmalltalk.org > -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
