Como un ejercicio de aprendizaje de scala y programación funcional, implementé la siguiente def sin cola recursiva que calcula el pascal's number en cualquier ubicación. El programa en sí sirve como la definición del triángulo de Pascal. Se ve gráficamente de la siguiente maneraerlang vs jvm (scala) rendimiento de recursión
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
def pascal(c: Int, r: Int): Int =
if (c == 0 || c == r) 1 else pascal(c - 1, r - 1) + pascal(c, r - 1)
Sin embargo cuando se trata de una duración de pascal(25,50)
en Mac OS X 10.6.8 (2,53 GHz Intel Core 2 Duo) que todavía no ha terminado de ejecutarse después de 20 minutos .
sólo para comparar con Erlang, he instalado R15B02 y escribí programa equivalente de la siguiente manera:
-module(pascal).
-export([calc_pascal/2]).
calc_pascal(0,_) -> 1;
calc_pascal(C,R) when C==R -> 1;
calc_pascal(C,R) when C<R -> calc_pascal(C-1,R-1) + calc_pascal(C-1,R).
pascal:calc_pascal(25,50)
acabados en ~ 4 seg.
¿Por qué podría ser la razón de tanta diferencia de rendimiento? ¿Jvm no está tan avanzado como el tiempo de ejecución de erlang para programas recursivos?
Scala se realizó en Eclipse de compilar y ejecutar de JUnit, no desde REPL –
'calc_pascal (C-1, R)' debe ser 'calc_pascal (C, R -1) ' –
Quien haya votado negativamente esto debería comentar por qué ... De las preguntas frecuentes sobre la votación negativa:' publicación notoriamente descuidada, sin esfuerzo invertido', que claramente no es el caso ... –