Está bueno eso, incluso serái interesante jugar con clases como Cero o
Uno, asi como hacemos con True y False. El método que escribí sería
mas lindo. Nos sacaríamos IFs por todos lados (y supongo que nos
ganaríamos otros problemas)

On Sep 15, 9:22 am, Facundo Vozzi <[email protected]> wrote:
> 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.
>
> ...
>
> 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