Mostrando entradas con la etiqueta Programación funcional. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación funcional. Mostrar todas las entradas

viernes, 23 de agosto de 2019

Aprendiendo un nuevo lenguaje: Erlang

Saludos. Ya tenía ratos de no escribir una entrada en el blog, jejeje. El motivo de esta entrada es, primeramente, para dar señales de vida. Y en segundo lugar, para compartirles un repositorio de ejercicios/ejemplos de código en Erlang.

¿Qué es Erlang?

Erlang es un lenguaje de programación usado para construir sistemas de software de tiempo real masivamente escalables, que requieren una alta disponibilidad, como: telecomunicaciones, banca, tiendas en línea, telefonía y mensajería instantánea.

¿Por qué Erlang?

La principal razón por la que he decidido aprender Erlang es porque es uno de los lenguajes utilizados por la empresa para la que trabajo como subcontratista. En segundo lugar, porque es un lenguaje que usa el paradigma de la programación funcional, el cuál me encanta desde que me lo enseñaron en la universidad con DrScheme (hoy Racket), el cual es una variante de LISP.

En tercer lugar es porque este lenguaje posee un runtime ya preparado para sistemas distribuidos, de alta concurrencia con tolerancia a fallos, e implementa out-of-the-box el modelo de actores, el cual me pareció muy interesante cuando lo aprendí con Scala y Akka en un curso de programación reactiva. De hecho Akka se basó en el modelo de actores implementado en Erlang.

En cuarto lugar que un día de estos, para una tarea que tenía asignada en el trabajo, necesitaba saber cómo funcionaba algo de la API del sistema. Actualmente me desempeño como desarrollador front-end, por lo que no toco nada de la API. Sin embargo, en esta ocasión antes de preguntar, me dió por curiosear el código fuente del backend, a ver qué tan lejos podía llegar, y debo decir que... no me sentí tan perdido como la chinita en el bosque de la China jajaja. Gracias a que los desarrolladores del backend tienen muy buenas prácticas para organizar el código y nombrar variables, fue posible intentar dilucidar qué hacían los pedazos de código que logré encontrar.

Por otra parte, yo ya había leído un poco de Erlang, y había empezado hace tiempo un curso en Elixir (que he dejado olvidado, por cierto), así que al menos sabía como se definían las funciones y se asignaban las variables. Además de esto, al ser un lenguaje funcional, tiene esa maravilla llamada pattern matching. Realmente no sé si es algo del paradigma funcional, pero todos los lenguajes funcionales que he tocado lo tienen, y en el código que alcancé a ver lo estaban usando, así que mas o menos pude imaginar la intención de las funciones.

Y en último lugar que unos compañeros del trabajo hablaron acerca de un sitio web para que los desarrolladores practiquen y prueben sus conocimientos, y decidí inscribirme. Al estar curioseando, vi que había una sección de prácticas de Programación Funcional, con ejercicios que se podían hacer en distintos lenguajes como Scala, Haskell, Clojure, Racket, Elixir y Erlang. Estoy más familiarizado con Scala, pero Racket no lo recuerdo mucho, Elixir ya se me borró del caché, Haskell solo conozco qué es, y con Clojure no he pasado del hola mundo. Pero como había visto Erlang recientemente, me llamó la atención, y me animé a hacer un par de ejercicios con él. Después de una gran perdida que me dí porque ya no me acordaba que las variables inician con mayúsculas y los símbolos con minúsculas (lo cuál no se apega a lo que estoy acostumbrado), logré completar uno de los ejercicios.

I can haz teh codez?


Para que no me vuelva a olvidar como hice algunas cosas por mi memoria de corto plazo, decidí agregar el ejercicio en un repositorio de GitHub, el cuál puede servir a futuro (cercano o lejano, aunque espero que no tan lejano) para ir compilando de cuando en cuando alguno que otro ejemplo o ejercicio interesante:


Cabe mencionar que soy un completo noob en Erlang, así que dudo que tenga buenas prácticas. Sin embargo, espero que a alguien que esté aprendiendo como yo le sirvan, y cualquier Pull Request con mejoras o más ejercicios es bienvenido.

jueves, 16 de agosto de 2018

PLT Scheme - Verificar que una cadena contiene solo letras minúsculas

Hola otra vez! Ahora espero no extenderme demasiado, como la primera vez. Bueno, esta es una pequeña “abstracción funcional” en PLT Scheme (ahora Racket), que verifica que una cadena este compuesta solamente por letras minúsculas.



Aunque parezca una función sencilla, contemplad que tiene algo interesante: se transforma la cadena de caracteres a una lista de caracteres (que contiene elementos tipo char), y se envía como parámetro a la función auxiliar, soloMinAux?, donde luego se extrae cada caracter, se transforma en un entero correspondiente al código ASCII en base diez, y he alli la magia, solo se verifica que este número esté entre los correspondientes a las letras minúsculas. Voilá (creo que así se escribe). Esto facilita mucho el trabajo a la hora de verificar si un carácter pertenece a una lista de caracteres consecutivos en el código ASCII. Además, las funciones string->list (que convierte una cadena a lista de caracteres) y char->integer (que convierte un caracter a un entero decimal correspondiente a su código ASCII) pueden ser de utilidad para manipular de muchas formas las cadenas de caracteres y los caracteres por si solos.

Bueno, espero que esta función les sea de utilidad, al menos para ver como se puede trabajar con caracteres y el código ASCII, y también supongo que les alegrará saber que hoy no me extendí mucho (aunque alguien dijo que ojala argumentara bastante cuando hablo, así como cuando escribo), pero bueno... Así que por el momento me despido, y les dejo esta frase, para todos aquellos que tienen una forma particular de ubicar sus cosas en el grandioso desorden que con mucho cariño llaman escritorio.
If a cluttered desk is the sign of a cluttered mind, what is the significance of a clean desk?
- Laurence J. Peter

Publicado originalmente el 2013-03-04, en https://itsouvenirs.wordpress.com/2013/03/04/plt-scheme-verificar-que-una-cadena-contiene-solo-letras-minusculas/.

lunes, 1 de abril de 2013

WP - Programación funcional 01-2009 - Práctica No. 3

Tristemente, y como muchos de ustedes, estoy en parciales 😟 Así q no me queda mucho tiempo. De momento sólo les dejo este enlace:

http://www.dccia.ua.es/dccia/inf/asignaturas/LPP/2007-2008/tema-07.html

La verdad es que contempla totalmente lo que se pretendía abarcar con la tercera práctica, más un par de cosas extras. El objetivo de la práctica era aprender a construir funciones que permitieran utilizar una cantidad de parámetros variable, por lo que, para efectos del curso, no es necesario leer lo de la introducción, quasiquotation y unquote-splicing, aunque son cosas interesantes que podrían serles útiles en algún futuro (cercano, lejano, o infinitamente lejano, o sea, nunca). También hay algunos ejemplos un poco más elevados, como hacer su propio let o su propio cond.

Hasta dentro de una semana tendré tiempo de continuar con el blog, y de revisar las tareas, asi que les pido las disculpas del caso. Hasta entonces, les debo las explicaciones de estas últimas prácticas.

Publicado originalmente el 25/04/2009, en http://itsouvenirs.wordpress.com/2009/04/25/practica-no-3/.

viernes, 29 de marzo de 2013

WP - Programación funcional 01-2009 - Práctica No. 1


Debido a que no tengo mucho tiempo, y que los primeros dos problemas fueron resueltos satisfactoriamente en la práctica, he decidido mostrar acá solamente la resolución del tercer problema. El correspondiente enunciado dice lo siguiente:
Construya un programa que lea desde teclado las coordenadas reales de tres puntos del plano cartesiano, y las coordenadas de un cuarto punto, del mismo plano, que diga en pantalla si el cuarto punto está o no dentro del triángulo (si está sobre los lados o vértices, está adentro). Cada punto se ingresará mediante dos números reales que representan la coordenada X y la coordenada Y. Asuma que los puntos forman efectivamente un triángulo.
Del enunciado hay que notar lo siguiente:
Con la tecnología de Blogger.