Created
October 4, 2011 05:44
-
-
Save alejolp/1260980 to your computer and use it in GitHub Desktop.
Introducción a Haskell por alcuadrado.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[01:52] <alcuadrado> en 1928 Hilber propuso una serie de problemas matematicos que esperaba sean resueltos a lo largo del siglo XX, uno de ellos el Entscheidungsproblem, que planteba si se podia hacer un sistema o maquina que dada una formula de logica de primer orden te devuelva el valor de verdad de esta (True o False). | |
[01:53] <alcuadrado> este problema fue resuelto independientemente por dos personas, Church en 1936 | |
[01:53] <alcuadrado> y Alan Turing <3 en 1937 | |
[01:53] <alcuadrado> y lo resolvieron de formas radicalmente distintas | |
[01:54] <alcuadrado> Turing (el padre de la computacion) creo una abtraccion de lo que era para el la resolucion de un problema por parte de una persona en lo que se llama Maquina de Turing (la computadora mas basica del mundo) | |
[01:54] <alcuadrado> la clave de estas es que se tiene una memoria o estado, la cual se va mutando hasta obtener el resultado | |
[01:54] <alcuadrado> como funcionan las pcs de hoy en dia | |
[01:54] <alcuadrado> uno tiene el estado en la ram y se aplica una serie de transformaciones de los valores de esta | |
[01:54] <alcuadrado> hasta ahi me seguis umpacu ? coincidis alejolp ? | |
[01:55] <alejolp> ACK | |
[01:55] <umpacu> hasta ahora creo que vengo siguiendo el hilo | |
[01:55] <alcuadrado> bueno, por otro lado | |
[01:55] <alcuadrado> Church lo resolvio de una forma mas matematica, mas pura o formal | |
[01:56] <alcuadrado> el tipo creo un sistema formal llamado Lambda Calculus | |
[01:56] <alcuadrado> que no es mas que una serie de reglas de reescritura | |
[01:56] <alcuadrado> dada una formula te dice que reescrituras podes ahcer | |
[01:56] <alejolp> \lambda-calculo <3 es la crem-de-la-crem | |
[01:56] <alcuadrado> no hay memoria, no hay estado, no hay nada | |
[01:57] <alcuadrado> hay formulas y aplicaciones (o reescrituras) | |
[01:57] <alcuadrado> son dos modelos computacionales totalmente distintos | |
[01:57] <alcuadrado> pero existe algo conocido como "Tesis de Turing-Church" | |
[01:58] <alcuadrado> que plantea que ambos tienen el mismo poder | |
[01:58] <alcuadrado> todo lo que resuelve uno lo puede resolver el otro | |
[01:58] <alcuadrado> y que no puede existir ningun otro modelo computacional mas poderoso | |
[01:58] <alejolp> \lambda calculo es una especie de funcion matematica pero que solo podes usar: a) el simbolo lambda, b) el punto, c) los parentesis, d) letras. No hay numeros, mucho menos strings. | |
[01:58] <alcuadrado> por cuestiones historias o fisica, no se bien, se uso el modelo computacional de turing | |
[01:58] <alcuadrado> y he aqui la mayoria de la computacion de hoy en dia | |
[01:59] <umpacu> hacía rato que no tenía tanas pestañas de artículos de la wiki abiertas al mismo tiempo | |
[01:59] <alcuadrado> pero existe otra "escuela de pensamiento" (por asi decirle) que le copa mas la onda de Church | |
[01:59] <alcuadrado> el mayor exponente de esta es haskell :) | |
[01:59] <alcuadrado> por eso es que es tan distinto | |
[01:59] <alcuadrado> en haskell no hay variables, no hay memoria directamente | |
[02:00] <alcuadrado> si bien se implementan con memoria las cosas | |
[02:00] <alcuadrado> a la hora de codear, uno no piensa en eso | |
[02:00] <umpacu> claro | |
[02:00] <alcuadrado> porque no existe la nocion de "estado" de un programa | |
[02:00] <alcuadrado> y eso en cosas altamente concurrentes la rompe | |
[02:00] <alcuadrado> no mas race conditions! | |
[02:01] <alejolp> como no hay variables, no tenes el problema de que dos threads modifiquen el valor de una variable al mismo tiempo. | |
[02:01] <umpacu> es jodido cambiar de paradigma, en la cabeza, cuando estás tan acostumbrado a una cosa | |
[02:01] <umpacu> pero parece muy interesante | |
[02:01] <alcuadrado> alejolp, coincidis en que es buena forma de explicarlo? :) | |
[02:01] <alejolp> alcuadrado: so far so good | |
[02:01] <alcuadrado> si, es muy jodido umpacu | |
[02:01] <alcuadrado> yo se pco de haskell la verdad | |
[02:02] <alcuadrado> a mi me aprece que si lo explicas de otra forma, sin entrar en lo que es modelos computacionales le estas mintiendo a quien te escuche jajaja | |
[02:02] <alejolp> yo arañé mónadas, pero solo en teoría, nunca codié ninguna | |
[02:02] <alejolp> alcuadrado: está muy bien encarada la explicacion | |
[02:02] <umpacu> muy copada la explicación | |
[02:03] <umpacu> tengo un par de cosas para consultarle a la wiki | |
[02:03] <umpacu> gracias a ambos por la intro! | |
[02:03] <alcuadrado> alejolp, las monadas son las cosas que no me terminan de cerrar de haskell, aunque nunca me puse realmente a verlo | |
[02:03] <alcuadrado> de nada umpacu | |
[02:04] <alejolp> como no hay variables, tampoco tenes variables globales. entonces todo el codigo que vos haces no puede modificar nada de afuera. eso en haskell es tan diferente que tiene un nombre: transparencia referencial. | |
[02:04] <alcuadrado> una vez dieron una charla de monadas en la facu, el año pasado, un amigo volvio fascinado, yo no se por que no fui | |
[02:04] <alejolp> cuando llamás a una funcion f(x), cada vez que la llames con x te va a devolver el mismo resultado. siempre. | |
[02:05] <alcuadrado> transparencia referencial quiere decir que si uno reemplaza un llamado a una funcion por la definicion de la misma (obviamente sin pisar nombres de argumentos y cosas asi) es EXACTAMENTE igual | |
[02:05] <alcuadrado> no, croe que flashie en eso ultimo | |
[02:05] <alcuadrado> jajajaja | |
[02:05] <alcuadrado> es lo que dice alejolp | |
[02:06] <alejolp> alcuadrado: si, está bien lo que dijiste, aunque suena más a inline que a memoization :p | |
[02:06] <alcuadrado> lo que dije es la defincion de lambda expressions (las formales, no las de js y demas jajaj) | |
[02:06] <alejolp> xd | |
[02:06] <alcuadrado> la de transparencia referencial es igual pero reemplazando por el resultado de una aplicacion, no por la definicion | |
[02:07] <alcuadrado> umpacu, una cosa copada de la trasparencia referencial | |
[02:07] <alcuadrado> es que como ya se sabe que pipa(123) va a dar siempre lo mismo | |
[02:07] <alejolp> claro por ejemplo, si tenes f(2) te devuelve "Perro", siempre que llames a f con argumento 2 te va a devolver "Perro". | |
[02:07] <alcuadrado> el interprete cache a el resultado y optimiza ZARPADO | |
[02:07] <alcuadrado> cachea* | |
[02:08] <alejolp> guardar en memoria "Perro" y "pipa" se llama memoization, memorización. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment