viernes, 22 de diciembre de 2006

Ripping off Myself. (2)

{ liquid [on]}
Al igual que el anterior, este también es un update hecho por mi para g3k, el segundo, y último que subí. Tengo algunos mas que nunca estubieron en la web, tal vez tambien los postee alguna vez...

Siguen sin tener nada que ver con hoy.. son viejos, y los odio..

Pero bueno, en cierta forma, son parte de mi. Y hasta que no tenga ganas de escribir algo nuevo, ayudan a que mi blog tenga contenido.

{ liquid use [ctrl+v] (Success Rate 93.4%)}

HeadShot... o.. Programación Lógica 101.

Buenos días, noches, afternoons, o lo que sea que sea para ustedes ahora.
Para mi son las 4:38 a.m. y acabo de llegar del boliche.
Sisi, se que me fui muy temprano, pero no tome nada así que no voy a escribir tantas boludeces.
Acabo de prender la PC y se me dio por acordarme que tengo que estudiar.
No es que lo vaya a hacer... pero ya que estudiar es tan aburrido, y siguiendo con una de las tantas enseñanzas de vida que me ha dado 12oman, "Si en mi dolor puedo hacerle mal a alguien mas entonces tal vez ya no sufra tanto."
Decidí que íbamos a estudiar juntos!.

Si!, me refiero a vos!, el/la que no se apresuró a cerrar el browser después de leer la línea anterior.
Bien, la materia es "Paradigmas de Programación".

(Nótese como perdí otro 80% de mi audiencia luego de eso... y me refiero al 80% de los 2 o 3 que todavía quedaban después de que leyeron 'estudiar juntos')
y el 'paradigma' elegido es la programación lógica.

Antes de empezar a tirar fruta sobre que es la programación lógica les voy a pedir a mis lectores más experimentados que me corrijan en todo lo que me equivoque. Creanme que eso me va a ayudar. (Excepto que hagan sus comentarios después del martes, que es el día que rindo.., eso ya seria totalmente inútil y solo podrían servir para metérmelos exactamente al lado del teletubbie al que me referí en el post anterior).

El paradigma lógico forma parte de la programación declarativa. Esto quiere decir que en vez de basarse en el planteo de un algoritmo para la resolución de un problema, como es el caso de los paradigmas procedurales, se basa en expresar todas las características de un determinado problema y luego buscar un objetivo entre las declaraciones realizadas.

(pausa para comer)

Probablemente la historia mas interesante que pueda contar en este post es como después de una pausa para comer volví a ponerme a escribir tres horas y media después (8:24 a.m.) empapado de pies a cabeza..,
Pero voy a ser el peor tipo y la voy a obviar (como en: 'lo voy a tomar como obvio', aunque probablemente solo lo sea para Viernes (y solo Viernes sabe quien es Viernes XD)).

Para el propósito de este texto vale con que solo digamos que me fui a un lugar mágico y mojado (no.. no me raptaron los extraterrestres del X-Com 2... esta vez... (puta debo ser el único que conoce el X-Com 2 (doble maldición, tengo que dejar de anidar paréntesis, es muy confuso))).

Antes de proseguir con lo que nos compete (como en: 'Orphen te hace un pete') solo voy a aclarar que si por alguna razón notan que en el texto precedente, subsiguiente, o consecuente (?) fue utilizada con mucha frecuencia la legendaria técnica del copy-paste no me jodan XD, ya que ella, la Internet, y la capacidad de hacer caso omiso de los Acuerdos de Licencia de Software son las tres mejores armas de todo programador.

Por su naturaleza, el paradigma lógico es aprovechado en mas medida en el campo de la inteligencia artificial, particularmente en lo que son Sistemas Expertos (sistemas que imitan el comportamiento de un humano, experto en cierto campo, en determinada situación… por ejemplo un sistema basado en el comportamiento de cualquier persona que genere insultos hacia orphen adecuados para cada momento) y en el Procesamiento del Lenguaje Humano.

Un programa lógico es un conjunto de axiomas y reglas que definen relaciones entre objetos. La ejecución del mismo corresponde a la deducción de las consecuencias del programa. Un programa define un conjunto de consecuencias que constituyen su significado. El arte de la programación lógica es construir concisos y elegantes programas que tengan el significado deseado.

Ruff... esa es la contraparte de utilizar el ampliamente conocido ((ctrl+c)+(ctrl+v)), todo se llena de palabrerío confuso.., mejor saltemos a ver algo de código en Prolog que es el único lenguaje que conozco que utilice este tipo de paradigma.

Primero, antes que todo, y después de nada tenemos los Hechos. Los hechos establecen una relación entre los objetos. Esta relación se llama predicado (como los adeptos a la lógica ya sabrán) y los nombres de los individuos átomos. Los nombres de los predicados van con minúscula, al igual que los de los átomos, y el hecho se finaliza con un punto. Algunos ejemplos de hechos serían:

hombre(yo).

hombre(k).

hombre(octubre).

hombre(orphen).

hombre(bleh).

hombre(manny).

mujer(gata).

mujer(enfermera).

animal(perro).


gusta(yo, mujeres).

gusta(manny, mujeres).

gusta(orphen, hombres).

gusta(k, detodo).

gusta(octubre, animales).

gusta(octubre, hombres).


La segunda forma de sentencia de un programa lógico es la consulta.

Una consulta consiste en hacer una pregunta acerca de si se cumple o no una cierta relación entre objetos. Por ej.: gusta (orphen, hombres)?


Responder una consulta consiste en determinar si es ua consecuencia lógica del mismo, que se obtiene de aplicar las reglas de deducción o inferencia. La primera y más simple regla de deducción es la identidad. Esto significa encontrar este hecho como tal en la base de conocimientos. Si un hecho idéntico a la consulta es hallado responderá true.

O sea que (y así es como nos lo mostraría el intérprete de Prolog):


?- hombre(octubre).
true

?- gusta(octubre, animales).
true

?- gusta(octubre, orphen).
false

PERO!!, un minuto..., sabemos que eso es Cierto!, porque nos tiro false como respuesta??. Lo que pasa es que nuestro pequeño amigo prolog usa un concepto de lógica cerrada y solo puede deducir sobre los hechos que nosotros le presentamos. Esto quiere decir que un 'false' no significa que algo no sea verdad en nuestra realidad.., sino que solo lo es para el contexto de información que le proporcionamos a nuestro programa.

Pero que pasa si yo quiero conocer de forma mas general los objetos que cumplen con cierta característica??.. fácil, utilizamos variables lógicas, en prolog las variables lógicas se expresan con mayúsculas. La consola interactiva de prolog nos dejara quedarnos con un resultado (si es que hay alguno, sino simplemente dirá 'false' o ‘No’) o seguir viéndolos presionando ";". Para no aburrirlos. Aunque probablemente a esta altura los únicos que siguen leyendo son K, manny o pablo (psp, a quien a partir de ahora solo me referiré como he-that-dont-exists) y solo por respeto, no porque les guste mi post. Un minuto... que respeto??... estoy solo!!, nadie esta leyendo esto y puedo decir lo que quiera (orphen gay!!).., bien , igual acá van los ejemplos (las líneas para separar las agregue yo porque soy buenito con su capacidad de reconocer bloques de texto en un ambiente uniforme):
--------------------------------

mujer(X).

X = gata ;

X = enfermera

No.

--------------------------------
Ese ultimo "No" quiere decir que se acabaron los resultados.
--------------------------------

gusta(yo, X).

X = mujeres ;

No.

--------------------------------

gusta(X, Y);

X = yo

Y = mujeres

X = manny

Y = mujeres

Yes.

--------------------------------

Ese ultimo "Yes" quiere decir que quedan resultados pero yo apreté Enter en vez de ";". Y por suerte porque los demás resultados daban lástima..

Esto ya es Súper largo!!, y todavía falta tanto que hablar y ESTUDIAR :( sobre la programación lógica. Se que fue divertido para mi, al menos mas divertido que estudiar solo, así que si llego a aprobar el martes (no creo que antes..) tal vez hasta hago una segunda parte..(a menos que a ninguna de las cero personas que llegaron hasta acá les halla gustado), no se enojen neófitos de la programación los insultos a orphen seguirán ahí (ya que tengo mi sistema Experto que los genera) y harán la lectura de mis jeroglíficos mas amena.

Me despido haciendo honor al símbolo de la redundancia que todo lo redunda, todo lo redunda y siempre vuelve sobre lo mismo (@), A los Read que el Turbo Pascal con alzhaimer olvida que existen cuando se le canta, al editor del worldpress que se hace la perra y no me quiere enseñar a poner espaciado simple, a mi grillo Primavera y por supuesto a el infaltable... el único…

el símbolo de destrucción, que todo lo destruye, todo lo elimina y solo va al final, nunca al medio ni al principio.

{ liquid note: el símbolo, al final :)}
{ liquid [off]}

(X)

1 comentario:

Anónimo dijo...

Estoy esperando el up-date. ¿Cómo sigue la historia?