Sí, estoy de acuerdo en lo que decís. Solo quería poner que el método si "terminaba" para los negativos. Después que pasa con el factorial de un negativo es discutible porque no está definido matematicamente así que podría devolver 1 o tirar una excepción. También si tuvieramos modelados los Naturales más el cero podrías implementar el método solo ahí.
Otro saludo. 2010/9/15 [email protected] <[email protected]> > Facundo, > Tenés razón, pero tal vez lo que hice peor fue escribir código > Smalltalk fuera de Smalltalk (en un mail) dando a entender de que era > un algortímo cuando no lo es. No solo porque Smalltalk me hubiese > avisado de ese punto que decis, sino porque no considero el ambiente, > que es lo mas importante. Y no alcanzaría con especificar la clase del > método, debería especificar todos los métodos y clases del ambiente, > los objetos instanciados, todo... y seguiría sin alcanzar porque es un > ambiente. Lo digo desde el punto de vista práctico (creo filosofía en > esto). > Respecto a los negativos, mas allá de la definición matemática, > remarco que los métodos no siempre se pueden enviar a todos los > objetos posibles del dominio de una clase. En general los métodos no > resuelven todo lo que un receptor de esa clase puede devolver, y sería > un error hacer programación defensiva con eso. Asi como no se le puede > enviar #copyFrom: 5 a cualquier String, ni #new a cualquier clase, ni > #arcCos a cualquier Float. La responsabilidad en el envió de un > mensaje está del lado del emisor y no del receptor o método que lo > resuelve. > > > Saludos, > Diego > > > On Sep 15, 6:44 am, Facundo Vozzi <[email protected]> wrote: > > 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 > Coronelbegin_of_the_skype_highlighting end_of_the_skype_highlighting > > > > > > 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> > > > <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> > > > <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 > > > > ... > > > > read more »- 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 > -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
