Ada Lovelace, la primera programadora de la historia (y genio matemático)

Lo que ven en la imagen anterior es un pedazo de código de programación. Una serie de instrucciones que son leídas y ejecutadas por una computadora. En la historia de la informática la primera persona en idear una serie de instrucciones ordenadas que puedan ser ejecutadas por una maquina fue una mujer. Ada Lovelace, conocida por ser un prodigio en la matemática, y es reconocida por escribir el primer programa computacional a mediados del siglo XIX.

Hace más de dos siglos Lovelace no solo fue responsable de crear el primer código de computación de la historia. Ella fue toda una pionera y visionaria de la ciencias de la informática, previo todo lo que las computadoras podrían realizar. Para ella las computadoras no serian solo instrumentos para realizar cálculos, también podrían hacer todo lo que la mente humana era capaz de hacer.

Ver Completo: Ada Lovelace, la primera programadora de la historia (y genio matemático)

El arte de Escher recreado matemáticamente mediante programación y geometría | Microsiervos (Ordenadores)

En las obras de M.C. Escher hay mucha matemática y geometría, pero un poco paradójicamente el propio Escher no se consideraba un gran conocedor de las matemáticas. Reconociendo sus propias limitaciones en más de una ocasión recurrió a la exploración autodidacta, a inspirarse en las matemáticas de otros (como Roger Penrose y sus figuras imposibles) y a consultar a conocidos para analizar lo que surgía de su mente con más detalle e indagar cómo desarrollar nuevas obras.

[…]

Continuar Leyendo: El arte de Escher recreado matemáticamente mediante programación y geometría | Microsiervos (Ordenadores)

Lenguaje de Programación para Matemática | J

El lenguaje de programación J, diseñado por Kenneth Iverson y Roger Hui en los ’90, es una síntesis de los lenguajes de programación APL (diseñado también por Iverson) y los lenguajes funcionales FP y FL creados por John Backus (famoso por FORTRAN, ALGOL y BNF).

Para eliminar el problema generado por el uso de un juego de caracteres especiales en APL, J sólo requiere el juego de caracteres básicos ASCII. Se usan tanto el punto como los dos puntos para extender el significado del juego de caracteres disponible.

Dado que se trata de un lenguaje de programación de array, J es muy conciso y potente, y es útil para crear programas en los campos de las matemáticas y de la estadística, especialmente cuando involucran operaciones con matrices.

De la misma manera que los lenguajes FP/FL, J soporta Programación a nivel de funciones (también conocida como programación funcional de alto orden), gracias a sus características de programación tácita (nótese que la programación a nivel de funciones no es lo mismo que programación funcional).

A diferencia de muchos lenguajes que soportan la programación orientada a objetos, el flexible esquema de espacio de nombres jerárquico del lenguaje J (donde cada nombre existe en un ámbito particular) puede ser usado con efectividad como un marco de trabajo para realizar programación orientada a objetos basada tanto en clases, como en instancias.

J es un lenguaje de programación no von Neumanniano, que sin embargo permite que el programador use el estilo de programación von Neumann a conveniencia

¿Por qué J?

J es particularmente fuerte en el análisis matemático, estadístico y lógico de los datos. Es una herramienta poderosa en la construcción de nuevas y mejores soluciones a viejos problemas y aún mejor en encontrar soluciones donde el problema no está bien entendido.

Los sistemas J tienen:

  • Un entorno de desarrollo integrado
  • Bibliotecas estándar, utilidades y paquetes
    Consola, navegador y terminales frontales Qt
  • Interfaces con otros lenguajes de programación y aplicaciones
  • Gráficos integrados
  • Archivos de memoria asignados para aplicaciones de datos de alto rendimiento
  • Jd

“Si usted está interesado en programar soluciones a desafiantes problemas de procesamiento de datos, entonces el tiempo que invierte en aprender J será bien gastado”.

Fuente:

https://es.wikipedia.org/wiki/J_%28lenguaje_de_programaci%C3%B3n%29

http://www.jsoftware.com/

 

Lenguaje de Programación para Matemática | Python

Python es un lenguaje de programación poderoso y fácil de aprender. Cuenta con estructuras de datos eficientes y de alto nivel y un enfoque simple pero efectivo a la programación orientada a objetos. La elegante sintaxis de Python y su tipado dinámico, junto con su naturaleza interpretada, hacen de éste un lenguaje ideal para scripting y desarrollo rápido de aplicaciones en diversas áreas y sobre la mayoría de las plataformas.

El intérprete de Python y la extensa biblioteca estándar están a libre disposición en forma binaria y de código fuente para las principales plataformas desde el sitio web de Python, y puede distribuirse libremente. El mismo sitio contiene también distribuciones y enlaces de muchos módulos libres de Python de terceros, programas y herramientas, y documentación adicional.

El intérprete de Python puede extenderse fácilmente con nuevas funcionalidades y tipos de datos implementados en C o C++ (u otros lenguajes accesibles desde C). Python también puede usarse como un lenguaje de extensiones para aplicaciones personalizables.

Filosofía

Los usuarios de Python se refieren a menudo a la Filosofía Python que es bastante análoga a la filosofía de Unix. El código que sigue los principios de Python de legibilidad y transparencia se dice que es “pythonico”. Contrariamente, el código opaco u ofuscado es bautizado como “no pythonico” (“unpythonic” en inglés). Estos principios fueron famosamente descritos por el desarrollador de Python Tim Peters en El Zen de Python

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Disperso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.
  • Lo práctico gana a lo puro.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.15
  • Ahora es mejor que nunca.
    Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es difícil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Tim Peters, El Zen de Python

Fuente:

http://docs.python.org.ar

https://es.wikipedia.org/wiki/Python#Filosof.C3.ADa

 

Lenguaje de Programación para Matemática | Julia

Introducción:

Julia es un lenguaje de programación conocido en el ámbito científico por su vasta librería de funciones matemáticas, a la vez es un lenguaje de alto nivel y de alta perfomance.

El lenguaje fue creado por Stefan Karpinski, estudiante graduado de la Universidad de California, que estaba involucrado en una herramienta simulación de redes que requería el uso de varios lenguajes de programación diferentes. Curiosamente, ninguno de los lenguajes usados podía hacer toda la tarea, todo el proceso. Por ello, Karpinski, junto con su compañero de universidad Viral Shah y Jeff Bezanson del MIT, decidieron resolverlo diseñando un nuevo lenguaje que fuera compatible con prácticamente cualquier tarea. La meta de Karpinski y su equipo es construir un lenguaje único que haga todo bien.

La librería de funciones matemáticas, en gran parte están escrita en Julia, pero también se integra con librerías maduras, las mejoras librerías de C y las librerías de Fortran para álgebra lineal, la generación de números aleatorios, procesamiento de señales y procesamiento de cadenas.

Características

Entre las características de este lenguaje podemos nombrar:

  • Posibilidad de definir el comportamiento de una función con una combinación de tipos de argumentos y sistema dinámico de tipos: tipos para documentar, optimizar y ejecutar rutinas
  • Buen desempeño, el cual se aproxima (estadísticamente) a lenguajes como C
  • Macros como en LISP y otras funcionalidades de metaprogramación
  • Comunicación con otros lenguajes y plataformas. Se pueden llamar funciones de Python usando el paquete PyCall y se puede llamadar a funciones de C directamente. No se necesita nada más
  • Dado que fue diseñado para computación distribuida y en paralelo, contiene una poderosas Shell que puede manejar otros procesos
  • Generación automática de código especializado, eficiente, de acuerdo al tipo de argumentos
  • Conversiones elegante y extensibles para tipos numéricos y otros tipos. Además soporte para Unicode
  • Licencia MIT : libre y de código abierto

Sitio Web: http://julialang.org/

Fuente:

https://www.genbetadev.com/paradigmas-de-programacion/julia-un-lenguaje-del-futuro

Lenguaje de Programación para Matemática | Idris

Vista General

Idris es un lenguaje de programación funcional Puro de uso general con tipos dependientes.  Los tipos dependientes  se declaran con losvalores, lo que significa que algunos aspectos del comportamiento de un programa se pueden especificar con precisión en el tipo. Se compila, con la Evaluación perezosa . Sus características están influenciadas por Haskell y ML, e incluyen:

  • Tipos dependientes completos con coincidencia de patrones dependientes
  • Interfaz de función extranjera simple (a C)
  • El compilador permite la edición interactiva: el compilador le ayuda a escribir código usando los tipos.
  • cláusulas WHERE, regla WITH , simples expresiones con CASE, búsqueda de patrones cn LET y los enlaces de lambda
  • Registros dependientes con proyección y actualización
  • Interfaces (similares a clases de tipo en Haskell)
  • Resolución de sobrecarga basada en el tipo
  • DO notación entre paréntesis y las expresiones idiomáticas
  • Sintaxis significativa de sangría
  • Sintaxis extensible
  • Universos acumulativos
  • Comprobación de la totalidad
  • Entorno interactivoañ estilo HUGS

El lenguaje soporta un intetactivo comprobador de Teoremas comparable a Coq , incluyendo tácticas, mientras que este se enfoca en la programación de propósito general que en la prueba teoremas.

Lenguaje de Programación para Matemática | Haskell

¿Qué es Haskell?

Haskell es un lenguaje de programación estandarizado multi-propósito puramente funcional con semánticas no estrictas y fuerte tipificación estática. Su nombre se debe al lógico estadounidense Haskell Curry. En Haskell, “una función es un ciudadano de primera clase” del lenguaje de programación. Como lenguaje de programación funcional, el constructor de controles primario es la función. El lenguaje tiene sus orígenes en las observaciones de Haskell Curry y sus descendientes intelectuales.

Programación funcional

La programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas.

Características de Haskell

Lenguaje funcional de orden superior fuertemente tipificado.

  • Clasifica los entes de un programa en:
    • objetos (constantes y funciones) y
    • tipos: cada objeto debe tener un tipo.
  • Dispone de objetos y tipos predefinidos.
  • Permite diversas declaraciones de objetos (monomorfos y polimorfos):
    • funciones constructoras y
    • funciones definidas.
  • Permite diversas declaraciones de tipos (monomorfos y polimorfos):
    • tipos sinónimos y
    • tipos algebraicos„
  • Aplica:
    • un sistema de inferencia de tipos basado en el sistema de Hindley-Milner,
    • una estrategia de reducción perezosa

Principios de Haskell

  • Completitud sintáctica: Si en una expresión sintácticamente correcta se cambia una subexpresión por otra expresión correcta del mismo nivel (y tipo) la expresión resultante es igualmente correcta.
  • Completitud semántica: A todos los entes de cada nivel se les puede dar el mismo tratamiento:
    • pueden recibir nombre, y
    • pueden figurar en expresiones.
  • Estos principios dan lugar a una sintaxis sin “casos especiales” de la que se deriva la posibilidad de utilizar:
    • funciones de orden superior
    • y funciones currificadas

Fuentes:

https://es.wikipedia.org/wiki/Haskell

http://www.lcc.uma.es/~jmmb/declarativa/ApuntesPF2004/ProgFunII.pdf

Lenguaje de Programación para Matemática | SWI-Prolog

Programación Lógica

La Programación Lógica es un paradigma de computación que consiste de un enfoque declarativo para escribir programas para el computador. PROLOG es un lenguaje de computación basada en ese paradigma.  Los programas lógicos pueden ser entendidos y estudiados a partir de dos conceptos: verdad y deducción lógica. En programación lógica, uno puede preguntarse si un axioma de un programa es verdad bajo alguna interpretación de los símbolos del programa y si ciertas declaraciones lógicas son consecuencia del programa. Esas preguntas pueden ser respondidas independientemente de cualquier mecanismo de ejecución concreto.

PROLOG

Por otro lado, PROLOG es un lenguaje de programación con un significado operacional preciso que toma prestado sus conceptos básicos de la programación lógica. Los programas PROLOG son instrucciones para ejecutar sobre el computador. Esas instrucciones casi siempre son leídas como instrucciones lógicas y, lo más importante, el resultado de una computación de un programa PROLOG es una consecuencia lógica de los axiomas en éste.

Es ampliamente aceptado que una programación efectiva en PROLOG requiere de una comprensión de la teoría de programación lógica, por lo menos en sus aspectos fundamentales, pero también que esto redunda en un mayor dominio del  procesamiento de la información usando el conmputador.

Entorno de desarrollo Prolog

Prolog es un lenguaje de programación seminterpretado. Su funcionamiento es muy similar a Java. El código fuente se compila a un código de byte el cuál se interpreta en una máquina virtual denominada Warren Abstract Machine (comúnmente denominada WAM).

Por eso, un entorno de desarrollo Prolog se compone de:

Un compilador: Transforma el código fuente en código de byte. A diferencia de Java, no existe un Standard al respecto. Por eso, el código de byte generado por un entorno de desarrollo no tiene por que funcionar en el intérprete de otro entorno.
Un intérprete: Ejecuta el código de byte. Un shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los interfaces de línea de comando de los sistemas operativos.
Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la programación con restricciones, concurrente, orientada a objetos, etc.

Elementos en Prolog

Como hemos especificado antes, para construir programas en Prolog necesitamos una serie de elementos. Vamos a especificarlos:

  • Átomos: Es una definición genérica de un objeto del mundo que queremos representar.
  • Predicados: Nos permite especificar características de los objetos de nuestro mundo o las relaciones entre ellos.

SWI-Prolog

SWI-Prolog es una implementación en código abierto (en inglés, open source) del lenguaje de programación Prolog. Su autor principal es Jan Wielemaker. En desarrollo ininterrumpido desde 1987, SWI-Prolog posee un rico conjunto de características, bibliotecas (incluyendo su propia biblioteca para GUI, XPCE), herramientas (incluyendo un IDE) y una documentación extensiva. SWI-Prolog funciona en las plataformas Unix, Windows y Macintosh.

El nombre SWI deriva de Sociaal-Wetenschappelijke Informatica (“Informática de Ciencias Sociales”), el antiguo nombre de un grupo de investigación en la Universidad de Ámsterdam en el que Wielemaker está integrado. El nombre de ese grupo se cambió posteriormente a HCS (Human-Computer Studies)

Web Oficial: www.swi-prolog.org/

Fuente:

http://webdelprofesor.ula.ve/ingenieria/jacinto/logica/manual-prolog/introduccion-prolog.html

https://www.ecured.cu/Prolog_%28Lenguaje_de_programaci%C3%B3n%29

https://es.wikipedia.org/wiki/SWI-Prolog