Páginas

domingo, 31 de octubre de 2010

LENGUAJES FUNCIONALES



Laboratorio

La Programación funcional es un paradigma de programación declarativa basado en la utilización de funciones matemáticas..

Características

No como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas.

Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración.

Tipos de Lenguajes

Existen dos grandes categorías de lenguajes funcionales:

  • los funcionales puros
  • los híbridos

Lenguajes Puros

En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.

Entre los lenguajes funcionales puros, cabe destacar a aHaskell y Miranda

Lenguajes Hibridos

Los lenguajes funcionales híbridos

son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos , como las secuencias de instrucciones o la asignación de variables.

Los lenguajes funcionales híbridos más conocidos son

  • Scala
  • Lisp
  • Scheme
  • Ocaml
  • SAP
  • Standard ML


Aqui les dejo la definici[on de algunos lenguajes funcionales y algunos tutoriales

El Lisp (o LISP) es una familia de lenguajes de programación de computadora de tipo funcional con una larga historia y una sintaxis completamente entre paréntesis. Especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnológico de Massachusetts.

El Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programación, el Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador auto contenido.

El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el código fuente del Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programación de dominio específico empotrados en el Lisp.

TUROTIALLISP



R es un lenguaje y entorno de programación para análisis estadístico y gráfico.

Se trata de un proyecto de software libre, resultado de la implementación GNU del premiado lenguaje S. R y S-Plus -versión comercial de S- son, probablemente, los dos lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy populares en el campo de la investigación biomédica, la bioinformática y las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes librerías o paquetes con finalidades específicas de cálculo o gráfico.

R proporciona un amplio abanico de herramientas estadísticas (modelos lineales y no lineales, tests estadísticos, análisis de series temporales, algoritmos de clasificación y agrupamiento, etc.) y gráficas.

Al igual que S, se trata de un lenguaje de programación, lo que permite que los usuarios lo extiendan definiendo sus propias funciones. De hecho, gran parte de las funciones de R están escritas en el mismo R, aunque para algoritmos computacionalmente exigentes es posible desarrollar librerías en C, C++o Fortran que se cargan dinámicamente. Los usuarios más avanzados pueden también manipular los objetos de R directamente desde código desarrollado en C. R también puede extenderse a través de paquetes desarrollados por su comunidad de usuarios.

TUTORIALR



Haskell es un lenguaje de programación puramente funcional de propósito general y fuertemente tipado. Su nombre proviene del lógico Haskell Curry.

Las características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y calce de patrones. La combinación de las mismas pueden resultar en algunas funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de programar.

TUTORIALHASKELL Aqui podran encontrar varios tutoriales...


Enlace




Pagina1
Pagina2
Pagina3EnlacePagina4

sábado, 30 de octubre de 2010

CONVERSIONES



Aqui les dejo este programa hecho en python se trata de convertir numeros decimales a binario, octal y hexadecimal...

Código


EJECUCIÓN:


ALGORITMO:

1.Inicio
2. Pedir el número en decimal al cual se le va a realizar la conversion a binario, octal y hexadecimal y asignarlo a la variable numero.
3. Se declaran dos variables las cuales son aux y res y se les asigna el valor de la variable numero
4. Se crean tres llistas vacias: binario[], octal[], hexade[]
5. Para realizar las primera conversion a binario pregunta si res es mayo a 1 ya que 1 en decimal es 1 en binario y 0 en decimal es 0 en binario y no es necesidad de realizar ninguna operación.
5.1 Si es mayor a 1 entra al ciclo y empieza a realizar las operaciones necesarias, la primera es la división modular res% 2 ya que los residuo de las operaciones son los que nos da el resultado en binario y esto se agrega a la variable llamada aux.
5.2 La segunda operación es una división de res entre 2 para poder realizar la siguiente operación necesaria y se agrega a la variables res.
5.3 El valor de aux que fue el residuo de res%2 se agrega a la lista en la posición 0 para eso se uso la función insert y la variable aux se agrego como tipo caracter.
5.4 Los tres pasos anteriores se repiten hasta que la división sea = a 1.
6. Al salir del ciclo se agrega a la lista el ultimo valor de la división normal y se inserta en la posición 0.
7. Para realizar la segunda conversion a octal pregunta si res es mayo o igual a 8ya que del 0 al 7 son igaules en decimal l y no es necesidad de realizar ninguna operación.
7.1 Si es mayor a 1 entra al ciclo y empieza a realizar las operaciones necesarias, la primera es la división modular res% 8 ya que los residuo de las operaciones son los que nos da el resultado en octal y esto se agrega a la variable llamada aux.
7.2 La segunda operación es una división de res entre 8 para poder realizar la siguiente operación necesaria y se agrega a la variables res.
7.3 El valor de aux que fue el residuo de res%8 se agrega a la lista en la posición 0 para eso se uso la función insert y la variable aux se agrego como tipo caracter.
5.4 Los tres pasos anteriores se repiten hasta que la división sea menor a 8.
8. Al salir del ciclo se agrega a la lista el ultimo valor de la división normal y se inserta en la posición 0.
9. Para realizar la segunda conversion a octal pregunta si res es mayor o igual a 16.
9.1 Si es mayor a 1 entra al ciclo y empieza a realizar las operaciones necesarias, la primera es la división modular res% 16 ya que los residuo de las operaciones son los que nos da el resultado en octal y esto se agrega a la variable llamada aux.
9.2 La segunda operación es una división de res entre 16 para poder realizar la siguiente operación necesaria y se agrega a la variables res.
9.3 El valor de aux que fue el residuo de res%8 se agrega a la lista en la posición 0 para eso se uso la función insert y la variable aux se agrego como tipo caracter.
5.4 Los tres pasos anteriores se repiten hasta que la división sea menor a 16.
10. Al salir del ciclo se agrega a la lista el ultimo valor de la división normal y se inserta en la posición 0.
11. Cuando termina de realizar todos los calculos, la lista obtenida de hexade se agrega a una variable como una cadena de caracteres(ya no es una lista) pero estos se van a a gregar con un espacio entre ellos.
12. Se reemplazan los numeros que son del 10 al 15 por las letras correspondientes en el hexadecimal.
13. Reemplaza el espacio que dejamos por sin espacio.
14. Se imprimen los resultados en la pantalla, el binario lo juntamos com la función join para que se imprima toda la lista junta al igual que el octal y en el hexadecimal nadamas imrpimimos lo que es la variable unido.(esto se realiza pro que le agregamos los datos como si fueran tipo caracter ya que join solo funciona con letras).


EJEMPLO


A continuación muetsro el ejemplo de como convertir el numero decimal 10 a binario, octal y hexadecimal







Ahora este es un ejemplo para no confundir cuando se debe reemplazar un numero por una letra.



jueves, 28 de octubre de 2010



DISTANCIA DE EDICIÓN

La distancia de Leveinshtein o también conocida como distancia de edición , es un algoritmo tal que dadas dos cadenas, devuelve un entero que da una idea de la distancia (o parecido) entre ellas.
La definici
ón de distancia es el mínimo número de operaciones que hay que realizar para transformar una cadena en la otra.
Debe su nombre al matem
ático ruso Vladimir levenshtein .

Este entero se calcula contando las transformaciones que es necesario hacer sobre una de estas cadenas para obtener la otra.

Estas posibles transformaciones son:

  • Borrado de un carácter
  • Inserción de un carácter
  • Substitución de un carácter por otro


APLICACIONES

Algunas aplicaciones en la que se puede usar la distancia de edici
ón son:

  • Sistemas para la revisión de faltas ortográficas automatizada en textos.
  • Sistemas de reconocimiento de voz
  • Sistemas para el análisis de ADN.
  • Sistemas para la detección de plagios.


ALGORITMO CON UNA IMPLEMETACI
ÓN

1.-Pide la primer palabra y la ingresa a una variable llamada palabra



2.-Pide la segunda palabra y la ingresa a una variable llamada palabra2



3.-calcula la longitud de cada una de las palabras con la función len() y las agrega ala variable correspondiente long y long2

por ejemplo len(palabra)

la longitud de la palabra perro es de 5




4.-crea la matriz donde se realizara las operaciones necesarias para obtener la distancia

matriz= [[0 for x in xrange(long+1)] for y in xrange(long2+1)]

esto crea eje “x” y asigna el valor de 0 con un rango de long + 1 y

crea el eje “y” y asigna el valor de 0 con un rango de long2+1



5.- se enumeraran las letras de cada palabra, para eso se utilizo lo siguiente

i=1

while i<=long:

matriz[0][i]=i

i=i+1

i=1

while i<=long2:

matriz[i][0]=i

i=i+1



6.- Comienza hacer las operaciones necesarias para obtener la distancia, para recorrer toda la tabla se utilizaron 2 ciclos anidados como que fue el while, al entrar al ciclo se compara letra por letra de las 2 palabras, y se van comparando de 1 en 1, esto lo hace con el siguiente

if(palabra[j-1]==palabra2[i-1]): (se pone “-1” ya que como lo mencione anteriormente la palabra empieza desde la posición 0 )

en el cual si las letras son iguales, busca el número menor en la matriz, una posición menos en “x”, una posición menos en “y”, y una posición menos en “x” y “y”, Esto se realiza con una función que es min(), que esta te regresa el valor menor.

matriz[i][j]=min(matriz[i-1][j-1],matriz[i][j-1],matriz[i-1][j])

si las letras no son iguales hace lo mismo que el paso anterior , nada mas que al número menor le suma un 1

matriz[i][j]=min(matriz[i-1][j-1],matriz[i][j-1],matriz[i-1][j]) + 1



7.- Cuando termina de recorrer toda la tabla y de comparar todas las letras el resultado que buscamos se guardara en la última posición de “x” y “y” .





print "distancia: " +str(matriz[long2][long])



Aqui les dejo la imagen del código




Aquí les dejo un ejemplo de la distancia de edición de dos palabras

¿Cómo lo haremos?
Se le asignan costos a cada una de las transacciones.
Al borrado: 1 costo
A la inserci
ón: 1 costo
A la sustituci
ón:1 costo

Pero esto solo aplica si son las letras son diferentes.

Nos basamos a la siguiente figura

Se sabe que tomaremos el menor costo posible entonces mas adelante explico como se realiza esto.

¿Qué pasa si son iguales?

Cuando son iguales lo que hacemos es sumarle cero.

¿Cómo se hace?

Primero tenemos que tener las palabras:

Las palabras que en esta ocasión vamos a utilizar serán

CAMA

CABEZA

Después tenemos que ubicar las palabras en una tipo matriz como se muestra en la manera siguiente.



Empezamos a calcular la distancia

*Escogemos la primer letra de cada palabra como se muestra en la imagen con las flechas




  • Entonces checamos si son iguales o diferentes

  • Como vimos que son diferentes lo que hacemos es agarrar los cuatro cuadros que se encuentran entre M y C los cuales son los siguientes.




  • Entonces empezamos a realizar los cálculos de los costos, para ver cual cuesta menos la sustitución, la eliminación o la inserción. Entonces lo hacemos de la siguiente manera aumentándole uno de costo.


  • Como nos damos cuenta en la imagen anterior lo que hacemos es escoger el costo menor de los tres que se encuentran ahí (1,2,2), escogemos el menor que es 1 y lo insertamos en el cuadro en blanco que nos quedo.


  • En la siguiente imagen ya se encuentra el número en la tabla.


Así seguimos hasta encontrar calcular todos los costos.

Y así nos queda el resultado

  • Ahora se marca con rojo el camino más optimo.



¿Por qué es el camino optimo?


En la imagen vemos que es mejor tomar las letras que son iguales y sustituir entre las que son diferentes de ellas.

Aquí se ve donde se insertaron las letras, como pueden ver en la imagen cuando hay una inserción marcamos un cuadro arriba de otro. Así que antes de sustituir m hubo 2 inserciones.



La distancia es 4

Debajo se ve donde corrimos el programa, y comprobamos lo que realizamos anteriormente



Otros ejemplos


La distancia es 3

Seguidores