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%2bunsubscr...@goog­legroups.com>
> > <clubsmalltalk%2bunsubscr...@goog­­legroups.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%2bunsubscr...@goog­legroups.com>
> > <clubsmalltalk%2bunsubscr...@goog­­legroups.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]

http://www.clubSmalltalk.org

Responder a