Comparación de 3 implementaciones de Common Lisp (Clisp, GCL y SBCL) mediante la función de Takeuchi

En artículos anteriores comentamos la función de Takeuchi como prueba de rendimiento y la usamos para la comparación del rendimiento de Haskell, Maxima y Common Lisp.

En este artículo voy a usar una variación de la prueba anterior para comparar tres implementaciones de Common Lisp: Clisp, GCL (GNU Common Lisp) y SBCL (Steel Bank Common Lisp).

La función de Takeuchi es
tak(x,y,z) = \newline     \left\{     \begin{array}{ll}       y, & \mathrm{si} \ x \leq y \\       \mathrm{tak}(\mathrm{tak}(x-1,y,z),                    \mathrm{tak}(y-1,z,x),                    \mathrm{tak}(z-1,x,y)) & \mathrm{en\ caso\ contrario}     \end{array}     \right.

La prueba consistirá en comparar los tiempos empleados en calcular tak(n,0,n+1) para n entre 10 y 15.
Read More “Comparación de 3 implementaciones de Common Lisp (Clisp, GCL y SBCL) mediante la función de Takeuchi”

Programas compactos para calcular pi con la fórmula de Leibniz

En artículos anteriores hemos comparado la eficiencia de programas en distintos lenguajes. En este vamos a comparar la simplicidad de los programas para resolver un problema.

Como ejemplo he elegido el problema del cálculo compacto del número \pi mediante la fórmula de Leibniz


<br />    \pi = 4 \times \left(1 - \dfrac{1}{3} + \dfrac{1}{5} - \dfrac{1}{7} + \dots\right)<br />

El enunciado de problema es el siguiente

Escribir un programa, con el menor número posible de caracteres, para calcular el número \pi usando la fórmula de Leibniz con un error menor que 0.00001.

El problema se ha planteado en Code Golf: Leibniz formula for Pi y se han escrito distintas respuestas que resumo al final del artículo. Antes voy a presentar programas compactos en nuestros lenguajes habituales (Haskell, Maxima y Common Lisp).

Read More “Programas compactos para calcular pi con la fórmula de Leibniz”

El problema de la igualdad de los bordes de los árboles binarios (sameFringe)

Dos árboles binarios tienen iguales los bordes si tienen exactamente
las mismas hojas leídas de izquierda a derecha, independientemente de
nodos interiores. Por ejemplo,

Los bordes de los árboles 1 y 2 son iguales, aunque tiene distintas
estructuras internas. El árbol 3 no tiene el mismo borde que el 1 o
el 2, debido al nodo 4. El árbol 4 tampoco tiene el mismo borde que
el 1 debido al orden en que se leen las hojas.

El problema de la igualdad de los bordes de los árboles binarios
(samefringe, en inglés) consiste en decidir si dos árboles tienen los bordes iguales.
Read More “El problema de la igualdad de los bordes de los árboles binarios (sameFringe)”

Relación entre el número e y los números primos en Haskell

En el artículo ¿Qué tiene que ver el número e con los números primos? de Gaussianos se comenta una curiosa relación entre los números primos y el número e. Dicha relación se expresa mediante la fórmula


 e = \displaystyle\lim_{n \to{+}\infty}\displaystyle\sqrt[p_n]{\displaystyle\prod_{i=1}^n p_i}

donde p_i es el i-ésimo número primo.

A partir del artículo, he diseñado este ejercicio de Haskell para Informática (del Grado de Matemáticas).

El objetivo del ejercicio es la comprobación de la fórmula anterior.
Read More “Relación entre el número e y los números primos en Haskell”