<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>YakiBoo &#187; Ingeniería Informática</title>
	<atom:link href="http://www.yakiboo.net/category/ingenieria-informatica/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yakiboo.net</link>
	<description>... mi pequeño mundo binario</description>
	<lastBuildDate>Mon, 19 Dec 2011 23:38:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Programación Declarativa &#8211; Prácticas de Prolog resueltas (II)</title>
		<link>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/</link>
		<comments>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 23:35:37 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Inteligencia Artificial]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[UCLM]]></category>
		<category><![CDATA[Inteligencia artificial]]></category>
		<category><![CDATA[Programación declarativa]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2256</guid>
		<description><![CDATA[Después de la primera entrega, aquí os traigo más ejercicios de Prolog resueltos: Ejercicio 1 Definir un predicado sus(X,Y,L1,L2) que sea capaz de sustituir un elemento X por otro Y ...]]></description>
			<content:encoded><![CDATA[<p>Después de <a href="http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/">la primera entrega</a>, aquí os traigo más ejercicios de Prolog resueltos:</p>
<h5>Ejercicio 1</h5>
<p style="text-align: justify">
Definir un predicado sus(X,Y,L1,L2) que sea capaz de sustituir un elemento X por otro Y en la lista L1, para dar L2.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>%Ejercicio 2
sus(_,_,[],[]).
sus(X,Y,[H<PIPE>T],[Y<PIPE>Res]):-X=H,sus(X,Y,T,Res).
sus(X,Y,[H<PIPE>T],[H<PIPE>Res]):-X\=H,sus(X,Y,T,Res).</pre></td></tr></table></div>

<h5>Ejercicio 2</h5>
<p style="text-align: justify">
Definir la relación aplanar(Lista, Aplanada), donde Lista es en general una lista de listas, tan compleja en su anidamiento como queramos imaginar, y Aplanada es la lista que resulta de reorganizar los elementos contenidos en las listas anidadas en un único nivel, i.e. una lista plana. Por ejemplo:
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre>?- aplanar([[a, b], [c, [d, e]], f], L).
L = [a, b, c, d, e, f]</pre></td></tr></table></div>

<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>%Ejercicio 3
aplanar([],[]).
aplanar([X<PIPE>R],[X<PIPE>P]):- atomic(X),aplanar(R,P).
aplanar([X<PIPE>R],P):-  not(atomic(X)),aplanar(X,P_X),aplanar(R,P_R),append(P_X,P_R,P).</pre></td></tr></table></div>

<h5>Ejercicio 3</h5>
<p style="text-align: justify">
Definir un predicado igualesElem(L1,L2) que compruebe que L1 y L2 son listas que<br />
contienen los mismos elementos independientemente del orden de aparición.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre>%Ejercicio 4 
igualesElem([],[]).
igualesElem([H1<PIPE>T1],[H2<PIPE>T2]):- length([H1<PIPE>T1],N),length([H2<PIPE>T2],N),((H1==H2,igualesElem(T1,T2))<SEMI>
                                (algun(H1,[H2<PIPE>T2]),delete([H1<PIPE>T1],H1,AUX1),delete([H2<PIPE>T2],H1,AUX2),igualesElem(AUX1,AUX2))).
algun(X,[H<PIPE>T]):-(X==H)<SEMI>algun(X,T).</pre></td></tr></table></div>

<h5>Ejercicio 4</h5>
<p style="text-align: justify">
Definir un predicado descomponer(N,A,B) que permita resolver el problema de descomponer un número natural N en la suma de dos pares A y B. Esto es, descomponer(N,A,B) debe tomar como entrada un natural N y devolver dos naturales A y B tales que N = A + B.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>descomponer(N,A,B):-
    between(0,N,A), A mod 2=:=0, 
    between(0,N,B), B mod 2=:=0,
    A+B=:=N.</pre></td></tr></table></div>

<h5>Ejercicio 5</h5>
<p style="text-align: justify">
Rompecabezas de Brandreth. El cuadrado de 45 es 2025. Notad que si partimos el número<br />
en dos obtenemos los números 20 y 25 cuya suma es, precisamente, 45. Obtener que otros números cuyo cuadrado es un número de cuatro cifras cumplen esta propiedad. Con este fin, definir un predicado numBrandreth (N, C) que devuelva uno de estos números N y su cuadrado C.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre>numBrandreth(N,C):-between(32,99,N), C is N*N, A is C mod 100, B is C//100, A+B=:=N.</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diagramas de secuencia con SDEdit</title>
		<link>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/</link>
		<comments>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 19:23:22 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Ingeniería del Software]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2428</guid>
		<description><![CDATA[Muchos de vosotros, sobre todo los que estudiéis Ingeniería Informática, o algún grado similar, os habréis visto en la situación de tener que hacer diagramas de secuencia. Este tipo de ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Muchos de vosotros, sobre todo los que estudiéis Ingeniería Informática, o algún grado similar, os habréis visto en la situación de tener que hacer diagramas de secuencia. Este tipo de diagramas son realmente útiles para detallar casos de uso algo complejos.</p>
<p style="text-align: justify;">Pues bien, en muchas ocasiones la principal dificultad es encontrar la herramienta idónea para llevar a cabo estos diagramas. Existen muchas aplicaciones libres que permiten dibujar diagramas de todo tipo (una de las más destacables es <a href="http://projects.gnome.org/dia/">DIA</a>), pero yo os voy a presentar una herramienta muy diferente: <a href="http://sdedit.sourceforge.net/">SDEdit</a>. Esta aplicación está diseñada para realizar diagramas de secuencia únicamente, pero de forma totalmente automática. El usuario simplemente debe especificar formalmente el diagrama de secuencia en forma de texto, y el programa automáticamente realiza el diagrama gráficamente. Los resultados son muy buenos, como podéis ver en la siguiente imagen:</p>
<p style="text-align: center;"><a href="http://www.yakiboo.net/uploads/uc-modificar_cuenta.png"><img class="size-full wp-image-2429 aligncenter" title="uc-modificar_cuenta" src="http://www.yakiboo.net/uploads/uc-modificar_cuenta.png" alt="" width="525" height="250" /></a></p>
<p style="text-align: justify;">Para que os hagáis una idea de cómo es el código que maneja SDEdit, a continuación podéis ver el código empleado para generar el diagrama anterior:</p>
<pre>#![Modificar cuenta (escenario normal)]
visitante:Actor
w:Ventana de modificación
i:Gestor de usuarios
p:Persistencia
visitante:w.cambiar datos
visitante:w.pulsar botón de guardar
w:i.datos modificados
i:p.datos modificados
p:i.cambios exitosos
i:w.cambios exitosos
w:visitante.cambios realizados</pre>
</p>
<p style="text-align: justify;">Como podéis ver, no es nada complicado y el resultado es bastante bueno. Espero que os sea útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tablas LaTeX desde OpenOffice Calc</title>
		<link>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/</link>
		<comments>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 01:17:41 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Diseño y ofimática]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Libre Office]]></category>
		<category><![CDATA[Ofimática]]></category>
		<category><![CDATA[OpenOffice]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2299</guid>
		<description><![CDATA[Es posible que en alguna ocasión os hayáis topado con la necesidad de incluir una tabla en un documento LaTeX. Si la tabla es muy extensa o contiene gran cantidad ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Es posible que en alguna ocasión os hayáis topado con la necesidad de incluir una tabla en un documento LaTeX. Si la tabla es muy extensa o contiene gran cantidad de información, la tarea puede resultar sumamente tediosa.</p>
<p style="text-align: justify;">María del Carmen Ramírez me envió este pequeño tutorial para hacer las tablas en OpenOffice Calc y exportarlas después a LaTeX, facilitando mucho la tarea:</p>
<ul style="text-align: justify;">
<li>En primer lugar debemos descargar e instalar la macro <strong>calc2latex</strong> para OpenOffice, que será la encargada de generar el código LaTeX. Para ello:
<ul>
<li>Descargamos la macro (en formato ZIP) desde <a href="http://calc2latex.sourceforge.net/" target="_blank">la web del proyecto</a>.</li>
<li>Abrimos Calc, el procesador de hojas de cálculo de OpenOffice, y vamos al menú <strong>Herramientas</strong> &gt; <strong>Administrador de extensiones</strong>. Allí añadimos el ZIP que hemos descargado, mediante el botón <strong>Añadir</strong>, y seguidamente cerramos la ventana.</li>
<li>Desde este momento, la macro que hemos descargado ya está a nuestra disposición.</li>
</ul>
</li>
<li>Ahora ya podemos utilizar la macro. Para comprobar cómo funciona, vamos a crear una tabla de ejemplo en OpenOffice Calc.</li>
<li>Una vez tengamos la tabla lista, vamos a <strong>Herramientas</strong> &gt; <strong>Macros</strong> &gt; <strong>Ejecutar macro</strong>, y en la sección <strong>Mis macros</strong> desplegamos Calc2LaTeX y seleccionamos la macro del mismo nombre. En el cuadro de la derecha se mostrarán las funciones disponibles. Debemos seleccionar la función <strong>Main</strong> únicamente y hacer clic sobre <strong>Ejecutar</strong>.</li>
<li>Se desplegará una ventana en la que podremos personalizar algunos parámetros de la generación de código. Si no deseamos hacer ningún cambio basta con que hagamos clic sobre <strong>Convert</strong> y obtendremos el código LaTeX listo para copiar y pegar en el editor LaTeX que utilicemos.</li>
</ul>
<p style="text-align: justify;">Ya sólo nos queda probarlo. Debemos saber que el código obtenido con la macro no proporciona la tabla totalmente igual que la escribimos, es decir, es posible que nos mantenga elementos como palabras escritas en negrita o las alineaciones de los datos dentro de las celdas, pero si hemos modificado por ejemplo el color de algún dato, eso no nos lo mantiene.</p>
<p style="text-align: justify;">Os dejo un .tex de ejemplo, así tendréis la posibilidad de ver el código y observar cómo desde una tabla escrita en OpenOffice consigo un resultado más aproximado a lo que realmente busco.</p>
<ul style="text-align: justify;">
<li><a href="http://www.yakiboo.net/uploads/Ejemplo-Calc2LaTeX.zip" target="_self">Código LaTeX</a></li>
<li><a href="http://www.yakiboo.net/uploads/Ejemplo-Calc2LaTeX.pdf" target="_self">Documento anterior compilado a PDF</a></li>
</ul>
<p style="text-align: justify;">Espero que os sea de utilidad. Muchas gracias a María del Carmen por la info.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prácticas de Sistemas y Señales (ESI &#8211; UCLM)</title>
		<link>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/</link>
		<comments>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 14:53:41 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Ciencia y Tecnología]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Matlab y Octave]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[UCLM]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2263</guid>
		<description><![CDATA[Aquí os dejo la documentación de prácticas que hice para la asignatura de Sistemas y Señales de la ESI de la UCLM en el año 2009/2010. Están hechas en Matlab ...]]></description>
			<content:encoded><![CDATA[<p>Aquí os dejo la documentación de prácticas que hice para la asignatura de Sistemas y Señales de la ESI de la UCLM en el año 2009/2010. Están hechas en Matlab y Simulink, aunque casi la totalidad de las prácticas son compatibles con Octave. Espero que os sirva de ayuda.</p>
<p>Enlace: <a title="Sistemas y señales - David" href="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" target="_blank">aquí.</a><br />
<object classid="clsid:166b1bca-3f9c-11cf-8075-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"><param name="sound" value="true" /><param name="progress" value="true" /><param name="autostart" value="true" /><param name="swliveconnect" value="false" /><param name="swstretchstyle" value="none" /><param name="swstretchhalign" value="none" /><param name="swstretchvalign" value="none" /><param name="src" value="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" /><embed type="application/x-director" width="500" height="500" src="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" swstretchvalign="none" swstretchhalign="none" swstretchstyle="none" swliveconnect="false" autostart="true" progress="true" sound="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Documental de Arduino</title>
		<link>http://www.yakiboo.net/documental-de-arduino/</link>
		<comments>http://www.yakiboo.net/documental-de-arduino/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 12:30:58 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Ciencia y Tecnología]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Todo]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2099</guid>
		<description><![CDATA[Hace poco pude conocer la cantidad de cosas que se pueden hacer con una placa Arduino, os dejo un documental que he visto por aquí, espero que os guste. Documental ...]]></description>
			<content:encoded><![CDATA[<p>Hace poco pude conocer la cantidad de cosas que se pueden hacer con una placa Arduino, os dejo un documental que he visto por <a href="http://www.pillateunlinux.com/arduino-documental-sobre-hardware-libre/" target="_blank">aquí</a>, espero que os guste.</p>
<p><center><br />
<a href="http://www.youtube.com/watch?v=uMpURoKsNyo"></a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/uMpURoKsNyo" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/uMpURoKsNyo"></embed></object><br />
</center><br />
<a href="http://vimeo.com/18390711">Documental de Arduino en español</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/documental-de-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programación Declarativa &#8211; Prácticas de Prolog resueltas (I)</title>
		<link>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/</link>
		<comments>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 13:25:26 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Inteligencia Artificial]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[ejercicios resueltos]]></category>
		<category><![CDATA[Inteligencia artificial]]></category>
		<category><![CDATA[prácticas]]></category>
		<category><![CDATA[Programación declarativa]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2196</guid>
		<description><![CDATA[Este post va dedicado especialmente a los estudiantes de Ingeniería Informática, aunque también le resultará de gran utilidad a cualquier persona que esté empezando a estudiar algo de Inteligencia Artificial ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Este post va dedicado especialmente a los estudiantes de Ingeniería Informática, aunque también le resultará de gran utilidad a cualquier persona que esté empezando a estudiar algo de Inteligencia Artificial utilizando el lenguaje Prolog. A continuación voy a presentar una serie de ejercicios propuestos, así como una posible solución a los mismos. Cabe destacar que es posible que haya algún pequeño error en las soluciones, pero aún así os servirán para comprender el funcionamiento de Prolog.</p>
<p style="text-align: justify;">Pues bien, sin más preámbulos, aquí tenéis los ejercicios:</p>
<h5>Enunciado</h5>
<p style="text-align: justify;"><strong>El siguiente programa Prolog especifica una base de datos deductiva sobre relaciones familiares. Completar el código dado, respondiendo a los diferentes apartados, mediante la lectura de estos fragmentos del Génesis.</strong></p>
<p><em>&#8220;He aquí la descendencia de Teraj: Teraj engendró a Abram (posteriormente llamado `Abraham&#8217;, que significa `Padre de multitud&#8217;), Najor, y Harán. Harán engendró a Lot &#8230; La mujer de Abram se llamaba Sarai (o Sara) y la de Najor Melca, hija de Harán, padre de Melca y de Jesca.&#8221;</em></p>
<p><em>&#8220;Sarai, la mujer de Abram, no le había dado hijos, pero ella tenía una esclava egipcia de nombre Agar. &#8230; tomó a Agar y se la dio por mujer a Abram, &#8230; Agar parió un hijo a Abram y a este hijo tenido de Agar, Abram le llamó Ismael.&#8221;</em></p>
<p><em>Estando en la tierra de Guerar, Abram confeso que: &#8221; es verdad que ella (Sarai) también es mi hermana, hija de mi padre pero no de mi madre, y ahora es mi mujer.&#8221;</em></p>
<p><em>&#8220;Sara, pues, concibió y parió un hijo en su vejez, en el tiempo predicho por Dios. Y Abraham llamó al hijo que le nació Isaac (que significa `el que ríe&#8217;).&#8221; Isaac casó con Rebeca, &#8220;hija de Batuel, el que Melca parió a Najor&#8221; y hermana de Labán. Isaac y Rebeca tuvieron dos hijos, Esaú y Jacob, pero ésta es otra historia.</em></p>
<p style="text-align: justify;"><stron>El código dado por el ejercicio es:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre>%%% HECHOS
&nbsp;
padre(abraham,isaac).
padre(haran,lot).
padre(haran,melca).
padre(haran,jesca).
hombre(isaac).
hombre(lot).
mujer(melca).
mujer(jesca).
&nbsp;
%%% REGLAS
&nbsp;
ascendiente_directo(X, Y) :- (padre(X, Y)<SEMI> madre(X, Y)).
ascendiente(X, Z) :- ascendiente_directo(X, Z).
ascendiente(X, Z) :- ascendiente_directo(X, Y), ascendiente(Y, Z).
hijo(X,Y) :- hombre(X), ascendiente_directo(Y,X).
hija(X,Y) :- mujer(X), ascendiente_directo(Y,X).</pre></td></tr></table></div>

<p><strong>Se pide responder a los siguientes apartados:</strong></p>
<ul>
<li>Completar la base de datos con los hechos extraídos del fragmento del génesis anterior.</li>
<li>Definir las relaciones: ascendente, descendente, abuelo, hermano, tío, sobrino y primo.</li>
<li>Definir un predicado que nos informe de las relaciones que hoy consideramos incestuosas.</li>
</ul>
<h5>Solución</h5>
<p style="text-align: justify;">La solución que propongo es la siguiente (ya todo el código junto):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</pre></td><td class="code"><pre>				%HECHOS
%hombre
hombre(abraham).
hombre(isaac).
hombre(lot).
hombre(najor).
hombre(ismael).
hombre(haran).
hombre(teraj).
hombre(batuel).
hombre(laban).
hombre(esau).
hombre(jacob).
&nbsp;
%mujer
mujer(rebeca).
mujer(melca).
mujer(jesca).
mujer(sara).
mujer(agar).
&nbsp;
%esclava
esclava(agar).
&nbsp;
%padre
padre(abraham, isaac).
padre(abraham, ismael).
padre(haran, lot).
padre(haran, melca).
padre(haran, jesca).
padre(teraj, abraham).
padre(teraj, sara).
padre(teraj, najor).
padre(teraj, haran).
padre(batuel, rebeca).
padre(batuel, laban).
padre(najor, batuel).
padre(isaac, esau).
padre(isaac, jacob).
&nbsp;
%madre
madre(agar, ismael).
madre(sara, isaac).
madre(rebeca, esau).
madre(rebeca, jacob).
madre(melca, batuel).
&nbsp;
%casados 
casado(abraham, sara).
casado(isaac, rebeca).
casado(najor, melca).
&nbsp;
&nbsp;
				%REGLAS
%hijo
hijo(X, Y) :- padre(Y, X), hombre(X).
hija(X, Y) :- padre(Y, X), mujer(X).
&nbsp;
%casados
casados(X, Y) :- casado(X, Y)<SEMI> casado(Y, X).
&nbsp;
%ascendiente_directo
ascendiente_directo(X, Y) :- padre(X, Y)<SEMI> madre(X, Y).
&nbsp;
%abuelo
abuelo(X, Y) :- padre(X, Z), ascendiente_directo(Z, Y).
&nbsp;
%abuela
abuela(X, Y) :- madre(X, Z), ascendiente_directo(Z, Y).
&nbsp;
%nieto
nieto(X, Y) :- (abuelo(Y, X)<SEMI> abuela(Y, X)), hombre(X).
&nbsp;
%nieta
nieta(X, Y) :- (abuelo(Y, X)<SEMI> abuela(Y, X)), mujer(X).
&nbsp;
%ascendiente
ascendiente(X, Y) :- ascendiente_directo(X, Y).
ascendiente(X, Y) :- abuelo(X, Y)<SEMI> abuela(X, Y).
&nbsp;
%hermano
hermano(X, Y) :- hombre(X), (ascendiente_directo(Z, X), ascendiente_directo(Z, Y)), X\=Y.
&nbsp;
%hermana
hermana(X, Y) :- mujer(X), (ascendiente_directo(Z, X), ascendiente_directo(Z, Y)), X\=Y.
&nbsp;
%hermanos
hermanos(X, Y) :- hermano(X, Y)<SEMI> hermana(X, Y)<SEMI> hermano(Y, X)<SEMI> hermana(Y, X).
&nbsp;
%descendiente_directo
descendiente_directo(X, Y) :- ascendiente_directo(Y, X).
&nbsp;
%descendiente
descendiente(X, Y) :- descendiente_directo(Y, X).
descendiente(X, Y) :- nieto(X, Y)<SEMI> nieta(X, Y).
&nbsp;
%tio_carnal
tio_carnal(X, Y) :- hermanos(X, Z), ascendiente_directo(Z, Y), hombre(X).
tia_carnal(X, Y) :- hermanos(X, Z), ascendiente_directo(Z, Y), mujer(X).
&nbsp;
%tio_no_carnal
tio_no_carnal(X, Y) :- casados(X, Z), tia_carnal(Z, Y).
tia_no_carnal(X, Y) :- casados(X, Z), tio_carnal(Z, Y).
&nbsp;
%tio
tio(X, Y) :- tio_carnal(X, Y)<SEMI> tio_no_carnal(X, Y), not(padre(X,Y)), X\==Y.
&nbsp;
%tia
tia(X, Y) :- tia_carnal(X, Y)<SEMI> tia_no_carnal(X, Y), not(madre(X,Y)), X\==Y.
&nbsp;
%sobrino
sobrino(X, Y) :- hombre(X), (tio(Y, X)<SEMI> tia(Y, X)).
&nbsp;
%sobrina
sobrina(X, Y) :- mujer(X), (tio(Y, X)<SEMI> tia(Y, X)).
&nbsp;
%primo
primo(X, Y) :- hombre(X), (tio(Z, X)<SEMI> tia(Z, X)), ascendiente_directo(Z, Y),X\==Y.
&nbsp;
%prima
prima(X, Y) :- mujer(X), (tio(Z, X)<SEMI> tia(Z, X)), ascendiente_directo(Z, Y),X\==Y.
&nbsp;
%primos
primos(X, Y) :- primo(X, Y)<SEMI> primo(Y, X)<SEMI> prima(X, Y)<SEMI> prima(Y, X).
&nbsp;
%incestuosos
incestuosos(X, Y) :- casados(X, Y), hombre(X), mujer(Y),(hermanos(X, Y)<SEMI> primos(X, Y)<SEMI> ascendiente_directo(X, Y)<SEMI> descendiente_directo(X, Y)<SEMI> abuelo(X, Y)<SEMI> nieto(X, Y)<SEMI> abuela(X, Y)<SEMI> nieta(X, Y)<SEMI> tio(X, Y)<SEMI> tia(X, Y)<SEMI> sobrino(X, Y)<SEMI> sobrina(X, Y)).</pre></td></tr></table></div>

<p style="text-align: justify;">Espero que os sirva. Y si quereis aprender Programación Declarativa y Prolog, os recomiendo el libro &#8220;Programación lógica. Teoría y Práctica&#8221;, de Pascual Julián Iranzo y María Alpuente Frasnedo, que está muy bien escrito y completamente en español.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prácticas de Simulación UCLM</title>
		<link>http://www.yakiboo.net/practicas-de-simulacion-uclm/</link>
		<comments>http://www.yakiboo.net/practicas-de-simulacion-uclm/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 17:30:36 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[+]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Matlab y Octave]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[UCLM]]></category>
		<category><![CDATA[Matemáticas]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2172</guid>
		<description><![CDATA[Bueno, aquí os dejo unas prácticas resueltas de Simulación. No implica que este todo bien, es más se hicieron de una forma muy muy rápida, así que seguro que contiene ...]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="text-align: justify;">Bueno, aquí os dejo unas prácticas resueltas de Simulación. No implica que este todo bien, es más se hicieron de una forma muy muy rápida, así que seguro que contiene algunos errores, pero viene muy bien como ayuda para empezar.</p>
<p style="text-align: justify;">Viendo el código en Matlab me da vergüenza como está programado (no intentéis programar en Matlab como lo hacéis en Java o C, porque entonces estaréis perdiendo mucho potencial). Creo que toda la parte que implica sólo la programación en Matlab es compatible con Octave (sólo habrá que cambiar en ciertos lugares un poco de la sintaxis), pero para la parte de Simulink es imprescindible Matlab.</p>
<p style="text-align: justify;">Espero que podáis utilizarlo, lo mejoréis y nos lo enviéis para que podamos volver a colgarlo para los siguientes que lo necesiten.</p>
<p><center><br />
<object classid="clsid:166b1bca-3f9c-11cf-8075-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"><param name="sound" value="true" /><param name="progress" value="true" /><param name="autostart" value="true" /><param name="swliveconnect" value="false" /><param name="swstretchstyle" value="none" /><param name="swstretchhalign" value="none" /><param name="swstretchvalign" value="none" /><param name="src" value="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" /><embed type="application/x-director" width="560" height="600" src="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" swstretchvalign="none" swstretchhalign="none" swstretchstyle="none" swliveconnect="false" autostart="true" progress="true" sound="true"></embed></object><br />
</center><br />
<strong>Descargar: <a title="Prácticas de David" href="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" target="_blank">aquí</a>.</strong></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="text-align: justify;">Si tienes otros apuntes, prácticas, o lo que sea y quieres compartirlo dinoslo y lo publicamos.</p>
<p style="text-align: justify;">PD: Hay algunos datos &#8220;sospechosos&#8221; a quién los encuentre, le doy un premio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/practicas-de-simulacion-uclm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A* (A estrella) en Super Mario</title>
		<link>http://www.yakiboo.net/a-a-estrella-en-super-mario/</link>
		<comments>http://www.yakiboo.net/a-a-estrella-en-super-mario/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 18:28:20 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Inteligencia Artificial]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[Inteligencia artificial]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=1888</guid>
		<description><![CDATA[Vídeo: A estrella en Super Mario Mario AI Competition es un concurso de desarrolladores de IA (inteligencia artificial) para juegos donde la finalidad es generar un Mario inteligente capaz de sortear ...]]></description>
			<content:encoded><![CDATA[<p>Vídeo: <a href="http://www.youtube.com/watch?v=0s3d1LfjWCI&amp;feature=player_embedded">A estrella en Super Mario</a></p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/0s3d1LfjWCI?fs=1&amp;hl=es_ES&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/0s3d1LfjWCI?fs=1&amp;hl=es_ES&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: justify;"><a href="http://www.marioai.org/" target="_blank">Mario AI Competition</a> es un concurso de desarrolladores de IA (inteligencia artificial) para juegos donde la finalidad es generar un Mario inteligente capaz de sortear a sus enemigos, en la cual, en su edición del concurso (2008-09), el algoritmo A* (a estrella) de Robin Baumgarten ganó la convocatoria.</p>
<p style="text-align: justify;">Se trata de calcular sobre el modelo de Mario en Java un agente o entidad inteligente capaz de hacer que Mario llegue lo más rápido y lejos posible.</p>
<p style="text-align: justify;">Pd: las lineas rojas que vemos son las estimaciones de posición futura.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/a-a-estrella-en-super-mario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculando decimales de PI en Ubuntu</title>
		<link>http://www.yakiboo.net/calculando-decimales-de-pi-en-ubuntu/</link>
		<comments>http://www.yakiboo.net/calculando-decimales-de-pi-en-ubuntu/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 14:30:29 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Ciencia y Tecnología]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Matemáticas]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[PI]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=1695</guid>
		<description><![CDATA[Hoy os traigo una curiosidad de estas de GNU/Linux; la he encontrado en Ubuntu. Resulta que existe un programa en los repositorios que calcula PI con una precisión arbitraria que ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hoy os traigo una curiosidad de estas de GNU/Linux; la he encontrado en Ubuntu. Resulta que existe un programa en los repositorios que calcula PI con una precisión arbitraria que queramos. Por ejemplo, podemos calcular un billón de dedimales de PI, pero ya podeis dejar el PC un buen rato pensando, porque llevará su tiempo&#8230; Yo he calculado un millón de decimales, y lo hace bastante rápido.</p>
<p style="text-align: justify;">Si quereis probar, teneis que instalar el programa en cuestión (se llama PI):</p>
<blockquote style="text-align: justify;"><p><strong>sudo apt-get install pi</strong></p></blockquote>
<p style="text-align: justify;">Después bastará con ejecutarlo indicándole el número de decimales que queremos que calcule:</p>
<blockquote style="text-align: justify;"><p><strong>pi 5000</strong></p></blockquote>
<p style="text-align: justify;">calcularía los 5000 primeros decimales.</p>
<p style="text-align: justify;">Podeis utilizar esto también como un benchmark entre amigos, si lo combinais con el comando <em>time</em>:</p>
<blockquote>
<p style="text-align: justify;"><strong>time pi 50000 &gt; /dev/null</strong></p>
</blockquote>
<p style="text-align: justify;">Espero que os entretenga un rato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/calculando-decimales-de-pi-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle vs Google. ¿Quién se beneficia?</title>
		<link>http://www.yakiboo.net/oracle-vs-google-%c2%bfquien-se-beneficia/</link>
		<comments>http://www.yakiboo.net/oracle-vs-google-%c2%bfquien-se-beneficia/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 23:12:48 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Móviles]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Sofware Libre]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=1612</guid>
		<description><![CDATA[Hace poco os hablé de la demanda que había puesto Oracle a Google, y de cómo Google respondía a la misma. Pues bien, he leído últimamente en barrapunto una reseña ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hace poco os hablé de <a href="http://www.yakiboo.net/oracle-demanda-a-google/">la demanda que había puesto Oracle a Google</a>, y de <a href="http://www.yakiboo.net/google-responde-a-oracle/">cómo Google respondía</a> a la misma. Pues bien, he leído últimamente en <a href="http://softlibre.barrapunto.com/article.pl?sid=10/08/26/089203&amp;from=rss" target="_blank">barrapunto</a> una reseña sobre <a href="http://www.pcworld.com/article/204046/when_oracle_sues_google_who_really_wins.html?tk=hp_new" target="_blank">un artículo</a> en el que se mencionan posibles beneficiados en la batalla que Oracle ha iniciado contra Google. Así mismo, en barrapunto comentan algo sobre quiénes podrían ser perjudicados. Ambos grupos son los siguientes:</p>
<p style="text-align: justify;"><strong>Beneficiados:</strong></p>
<ul style="text-align: justify;">
<li><em>Apple</em>: no cabe duda de que cualquier pequeño golpe que sufra Android puede suponer una alegría para la empresa de la manzana, que ve cómo el sistema operativo de Google se está convirtiendo cada vez en un rival más fuerte para su iPhone.</li>
<li><em>Microsoft</em>: con la salida de Windows Phone 7, Microsoft intenta reparar muchos errores que cometió con Windows Mobile. Windows Phone 7 sale al mercado en una época dura, en la que el iPhone &#8211;con su enorme éxito&#8211;, Android &#8211;con su apabullante crecimiento&#8211; y Blackberry &#8211;con su gran importancia en empresas&#8211; reinan en un mundo donde el resto de alternativas no proyectan la suficiente sombra.</li>
<li><em>Intel y Nokia</em>: ambas empresas unieron sus fuerzas no hace mucho para conseguir hacer llegar MeeGoo &#8211;un nuevo sistema operativo móvil basado en Linux&#8211; a una buena posición. Es evidente que cualquier dificultad para Android, el gran sistema operativo móvil Linux, pueda ser buena para MeeGoo.</li>
<li><em>El software privativo y los abogados de patentes</em>: patentar software es algo con lo que mucha gente no está de acuerdo, pero las patentes sirven para estas cosas: sacarle pasta al adversario.</li>
</ul>
<p style="text-align: justify;"><strong>Perjudicados:</strong></p>
<ul style="text-align: justify;">
<li><em>Usuarios y desarrolladores de software libre</em>: cualquier golpe a un proyecto &#8220;abierto&#8221; tan grande como Android, es un duro golpe contra la gran comunidad del software libre. Aunque Google amortigua la &#8220;hostia&#8221; y veo difícil que usuarios y desarrolladores notemos algo.</li>
<li style="text-align: justify;"><em>Oracle</em>: sí, señores, creo que Oracle sale más perjudicada de lo que cree. No digo que económicamente sienta en algún momento el gran error que está cometiendo &#8211;no sólo con esta demanda, sino con <a href="http://www.yakiboo.net/oracle-pone-fin-a-opensolaris/" target="_blank">las puñaladas que está asestando al software libre</a>&#8211;, pero la mala publicidad que está consiguiendo entre blogs y foros no es buena para ninguna empresa. Están tirando por la borda muchos de importantes pilares que Sun consiguió erguir.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/oracle-vs-google-%c2%bfquien-se-beneficia/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

