jueves, 28 de octubre de 2010

LENGUAJES FUNCIONALES

EN LOS LENGUAJES FUNCIONALES DECIDI UTILIZAR HASKELL
ES UN POCO COMPLICADO LA VERDADA SU CODIFICACION
PERO LES PRESENTO LA SERIE GEOMETRICA UNA DE LAS PROGRECIONES MATEMATICAS
La Serie Geometrica está constituida por una secuencia de elementos en la que cada uno de ellos se obtiene multiplicando el anterior por una constante denominada razón o factor de la progresión. Se suele reservar el término progresión cuando la secuencia tiene una cantidad finita de términos mientras que se usa sucesión cuando hay una cantidad infinita de términos, si bien, esta distinción no es estricta.
Así,  es una progresión geométrica con razón igual a 3, porque:
15 = 5 × 3
45 = 15 × 3
135 = 45 × 3
405 = 135 × 3
y así sucesivamente.

El codigo en Haskell seria el siguiente:
module Geometric (geo, geo') where
import qualified Data.Ratio as R
data Geo = Geo Rational deriving (Eq, Ord, Show)
instance Num Geo where 
(+)    (Geo a) (Geo b)    = Geo (a + b) 
(*)    (Geo a) (Geo b)    = Geo (a * b) 
(-)    (Geo a) (Geo b)    = Geo (a - b) 
abs    (Geo a)            = Geo (abs a) 
signum (Geo a)            = Geo (signum a) 
fromInteger               = Geo . toRational
instance Real Geo where  toRational (Geo a)= toRational a
instance Fractional Geo where 
(/)    (Geo a) (Geo b)    = Geo (a / b) 
fromRational              = Geo
instance RealFrac Geo where 
properFraction (Geo a)    = case properFraction a of (i, f) -> (i, Geo f)
tmap2 :: (a -> b) -> (a, a) -> (b, b)
tmap2 f (x, y) = (f x, f y)
geo :: (Fractional n) => [Geo] -> [n]
geo = map (fromRational . toRational)
geo' :: (Integral n) => [Geo] -> [n]
geo' = map truncate . geo
def_factor = 2
instance Enum Geo where 
succ           (Geo n)  = Geo $ succ n 
pred           (Geo n)  = Geo $ pred n 
toEnum                  = Geo . toEnum 
fromEnum       (Geo n)  = fromEnum n 
enumFrom       n        = enumFromThen n (n * def_factor) 
enumFromThen   n n'     = let q = n' / n in iterate (* q) n 
enumFromTo     n end    = enumFromThenTo n (n * def_factor) end 
enumFromThenTo n n' end   
| n  > end             = []  
| n' > end             = [n]   
| otherwise            = takeWhile (<= end) $ enumFromThen n n'

La otra serie que tome fue la del Fcatorial en Perl
En este lenguaje es mas sencillo, almenos no se aplican tantas funciones
Su codigo es el siguiente
#factorial

$input=<>;
sub factorial
{
$s=1;
$r=1;
 while ($s <= $input)
 {
   $r *= $s;
   $s++;
 }
if($input == 0)
{
 $r=0;
}
return $r;
}
print "The result is".$r;
ESPERO LES HAYA GUSTADO!!! ESPERO COMENTARIOS

CORRIGIENDO EL LENGUAJE A LISP EL FACTORIAL SERIA:
(defun factorial (n)
    (if (= n 0)
    1
    (* n (factorial (- n 1)))
    )
)

8 comentarios:

  1. Muy bien el código en Haskell; sin embargo, te recuerdo que Perl lo vimos como lenguaje script, no lenguaje funcional. Por tanto, no te puedo dar crédito por el último programa; necesitaría que fuera ya sea en Scheme, Lisp, Erlang o ML.

    Recuerda que todavía tienen chance de entregar/corregir reportes.

    Calificación: 2.3/3

    ResponderEliminar
  2. BUENO, BUSKARE AHORA EN LIPS O ERLANG SON LOS LENGUAJES KE TENGO INSTALADOS EN MI UBUNTU JIJIJIJI

    ResponderEliminar
  3. hola!

    me gustaron muchos tus programas, aunque como dice la dra... perl no es de este tipo ..

    =)

    ResponderEliminar
  4. Muy bien los codigos ojala que puedas cambiar el de perl para que pueda aumentar tu calificacion.

    ResponderEliminar
  5. esta muy bien, solo te faltan imagenes para apreciarse mejor, saludos

    ResponderEliminar
  6. hiciste muy bien el programa en haskell pero creo que te falto por ahi otro programita que fuera funcional.

    ResponderEliminar
  7. faltan las pantallas de ejecucion para entender un poco mas el tema y modifiques el reporte para que obtengas los puntos faltantes

    ResponderEliminar
  8. Creo que pienso igual qe David si incluyeras las pantallas de ejecucion se entenderia super mejor y creo que te falto agregar otro programa de lenguajes funcionales

    ResponderEliminar