<?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>Novacreations &#187; Prolog</title>
	<atom:link href="http://www.novacreations.net/category/codigo/prolog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.novacreations.net</link>
	<description>Desarollando Software</description>
	<lastBuildDate>Wed, 03 Mar 2010 17:52:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Enigma de la viuda v1.0</title>
		<link>http://www.novacreations.net/160-enigma-de-la-viuda-v10/</link>
		<comments>http://www.novacreations.net/160-enigma-de-la-viuda-v10/#comments</comments>
		<pubDate>Sat, 16 Jul 2005 07:40:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Prolog]]></category>

		<guid isPermaLink="false">http://www.novacreations.net/160-enigma-de-la-viuda-v10/</guid>
		<description><![CDATA[Ejemplo de como resolver un problema lógico con Prolog ]]></description>
			<content:encoded><![CDATA[<p>Ejemplo de como resolver un problema lógico con Prolog </p>
<p>[prolog]<br />
predicates<br />
hermanaMenor(integer, integer, integer, integer, integer)<br />
hermanaMayor(integer, integer, integer, integer, integer)<br />
checaHermana(symbol, integer, integer)<br />
restart(symbol)<br />
salida<br />
start</p>
<p>clauses<br />
start:-write("--------- Enigma de la viuda v1.0 ---------"), nl, nl,<br />
	write("¿Cual es el resultado de la multiplicacion delas edades?   "), readint(M),<br />
	write("¿La mayor tiene ojos verdes? ( y / n )?  "), readLn(RES),<br />
	write("¿Cual es el número de la casa de enfrente?  "), readint(C), checaHermana(RES, M, C).</p>
<p>checaHermana(RES, M, C):- RES="y", hermanaMayor(1, 1, 1, M, C).<br />
checaHermana(RES, M, C):- RES="n", hermanaMenor(1, 1, 1, M, C).</p>
<p>hermanaMayor(X, Y, Z, M, _):- X=M, Y=M, Z=M, salida. </p>
<p>hermanaMayor(X, Y, Z, M, C):- X>Y, X>Z, Y>=Z, X*Y*Z=M, X+Y+Z=C,<br />
			write("Las edades son:"), nl,<br />
			write("Primera Hija: ", X),nl,<br />
			write("Segunda Hija ", Y),nl,<br />
			write("Tercera Hija ", Z), nl, fail.</p>
<p>hermanaMayor(X, Y, Z, M, C):- X<=M, X2=X+1, hermanaMayor(X2, Y, Z, M, C).<br />
hermanaMayor(1, Y, Z, M, C):- Y<=M, Y2=Y+1, hermanaMayor(1, Y2, Z, M, C).<br />
hermanaMayor(1, 1, Z, M, C):- Z<=M, Z2=Z+1, hermanaMayor(1, 1, Z2, M, C).</p>
<p>hermanaMenor(X, Y, Z, M, _):- X=M, Y=M, Z=M, salida.<br />
hermanaMenor(X, Y, Z, M, C):- X=Y, X>=Z, Y>=Z, X*Y*Z=M, X+Y+Z=C,<br />
			write("Las edades son:"), nl,<br />
			write("Primera Hija: ", X),nl,<br />
			write("Segunda Hija ", Y),nl,<br />
			write("Tercera Hija ", Z), nl, fail.</p>
<p>hermanaMenor(X, Y, Z, M, C):- X<=M, X2=X+1, hermanaMenor(X2, Y, Z, M, C).<br />
hermanaMenor(1, Y, Z, M, C):- Y<=M, Y2=Y+1, hermanaMenor(1, Y2, Z, M, C).<br />
hermanaMenor(1, 1, Z, M, C):- Z<=M, Z2=Z+1, hermanaMenor(1, 1, Z2, M, C).</p>
<p>salida:-write("¿Otra vez ( y / n )?  "), readln(R), restart(R).<br />
restart(R):-R="n", write("Gracias por utilizar este programa").<br />
restart(R):-R="y", start.</p>
<p>goal<br />
start, nl.</p>
<p>[/prolog]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novacreations.net/160-enigma-de-la-viuda-v10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema de los 3 Sombreros</title>
		<link>http://www.novacreations.net/161-problema-de-los-3-sombreros/</link>
		<comments>http://www.novacreations.net/161-problema-de-los-3-sombreros/#comments</comments>
		<pubDate>Mon, 16 May 2005 07:42:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Prolog]]></category>

		<guid isPermaLink="false">http://www.novacreations.net/161-problema-de-los-3-sombreros/</guid>
		<description><![CDATA[Ejemplo de un programa que resuelve un problema lógico en prolog. ]]></description>
			<content:encoded><![CDATA[<p>Ejemplo de un programa que resuelve un problema lógico en prolog. Ejemplo de un programa que resuelve un problema lógico en prolog. </p>
<p>[code]<br />
DOMAINS<br />
	lista = symbol*</p>
<p>PREDICATES</p>
<p>	pregunta()<br />
	imprime_sombreros(lista)<br />
	imprimeResultado(lista, symbol)<br />
	diferencia(symbol,lista,lista)<br />
	segundo_sabio(symbol, lista, symbol, lista) % Respuesta Primer Sabio, Lista de Combinaciones que vio el sabio anterior<br />
	primer_sabio(symbol, symbol, lista, symbol, lista)	%res1, res2, sombreros, vios2, vios1<br />
	compara_todo(lista)<br />
	diferencia_lista(lista, lista, lista)<br />
	pregunta_segundo_sabio(lista, lista, symbol)<br />
	checa_resultado(lista, lista, symbol, symbol, lista, lista)<br />
	start</p>
<p>CLAUSES</p>
<p>	pregunta():- Sombreros = [negro, rojo, negro, rojo, negro],<br />
	write("Había una vez en algún lejano lugar, un rey de chocolote con nariz de cacahuate, que quería\n"),<br />
	write("comprobar la sabiduría de sus tres sabios, por lo que les puso la saiguiente prueba:\n"),<br />
	write("contando con 3 sombreros negros y 2 rojos, a cada sabio le puso un sombrero, y al final le pregunto a sus sabios:\n"),<br />
	write("Comenzando por el 3ero de atras hacia adelante, ¿De que color tienes tu sombrero? a la que el sabio respondió NO SE, después pregunto al segundo sabio\n"),<br />
	write("¿De que color es tu sombrero?, el segundo sabio respondió NO SE, acudió por último al primer sabio y le preguntó, ¿Cuál es el color de tu sombrero?\n"),<br />
	write("y el primer sabio respondió el color de mi sombrero es.........\n"),<br />
	write("A lo anterior el rey puso las restricciones de que ningún sabio podía ver su propio sombrero, solo el o los de adelante, y que los sabios solo podían :\n"),<br />
	write("escuchar la respuesta de sus compañeros.\n"),<br />
	write("Por lo que recreando la sucedido en aquellos remotos tiempos y en ese lejano lugar, y narrado por Manuel, Rafael, Juan y Laura\n"),<br />
	write("para su proefesor Rafael, esta historia dice así:\n\n\n"),<br />
		write("Soy el sabio 3  y veo que:\n "),write("El sombrero del sabio 1 es: "),readln(Primero), write("El sombrero del sabio 2 es: "),<br />
	        readln(Segundo), diferencia(Primero, Sombreros, Res), diferencia(Segundo, Res, Resultado),<br />
		imprimeResultado(Resultado, Respuesta), pregunta_segundo_sabio(Resultado, Sombreros, Respuesta).<br />
             %Resultado es la lista de sombreros sin los 2 que vio)<br />
             %Respuesta es "si" o "no" sabe el primer sabio<br />
             %sombreros tiene la lista con todos los sombreros</p>
<p>             %respuesta del primer sabio,lista de todos sombreros posibles, el sombrero que ve el, la lista de todos los sombreros<br />
	segundo_sabio(RespuestaSabio, ListaCombinaciones, PrimerSombrero, Sombreros):- RespuestaSabio = "si", write("Si el primer sabio si supo "),<br />
		write(" y el sombrero del sabio de enfrente es de color: ", PrimerSombrero), nl, diferencia_lista(ListaCombinaciones, Sombreros, Restante),<br />
		diferencia(PrimerSombrero, Restante, Resultado), imprimeResultado(Resultado, RespuestaMia), nl,<br />
		primer_sabio(RespuestaSabio, RespuestaMia, Sombreros, PrimerSombrero, ListaCombinaciones).<br />
              %respuesta del primer, y segundo sabio, lista de todos sombreros posibles,sombrero que vio sabio2, lista de todos los sombreros<br />
	segundo_sabio(RespuestaSabio, ListaCombinaciones, PrimerSombrero, Sombreros):- RespuestaSabio = "no", write("Si el primer sabio no supo "),<br />
		write("y el sombrero del sabio de enfrente es de color: ", PrimerSombrero), nl, diferencia(PrimerSombrero, Sombreros, Restante),<br />
		diferencia_lista(ListaCombinaciones, Sombreros, Res), checa_resultado(Res, Restante, RespuestaSabio, PrimerSombrero, ListaCombinaciones, Sombreros).</p>
<p>		%el 3er sabio vio rojo rojo<br />
	primer_sabio(ResPuesta1, Respuesta2, Sombreros, PrimerSombrero, ListaCombinaciones) :- Respuesta1="si", Respuesta2="si", diferencia_lista(ListaCombinaciones, Sombreros, VistoSabio3),<br />
		diferencia(PrimerSombrero, VistoSabio3, SombreroSabio1), write("Soy primer sabio y con lo que se.....:\n"), imprimeResultado(SombreroSabio1, RespuestaFinal).<br />
		%el 3er sabio vio negro rojo<br />
	primer_sabio(Respuesta1, Respuesta2, Sombreros, VioSabio2, ListaCombinaciones) :- Respuesta1="no", Respuesta2="si", diferencia_lista(ListaCombinaciones, Sombreros, Restante),<br />
		diferencia(VioSabio2, Restante, Final), diferencia_lista(Final, Restante, Ultimo), write("Soy primer sabio y con lo que se.....:\n"), imprimeResultado(Ultimo, ResFinal).<br />
	        %el 3er sabio vio negro negro<br />
	primer_sabio(Respuesta1, Respuesta2, Sombreros, VioSabio2, ListaCombinaciones) :- Respuesta1="no", Respuesta2="no", diferencia_lista(ListaCombinaciones, Sombreros, Restante),<br />
		diferencia(VioSabio2, Restante, Final), diferencia_lista(Final, Restante, Ultimo), write("Soy primer sabio y con lo que se.....:\n"), imprimeResultado(Ultimo, ResFinal).</p>
<p>	checa_resultado(Res, Restante, RespuestaSabio1, PrimerSombrero, ListaCombinaciones, Sombreros) :- compara_todo(Res), imprimeResultado([nada|Res], Respuesta),<br />
		primer_sabio(RespuestaSabio1, Respuesta, Sombreros, PrimerSombrero, ListaCombinaciones).<br />
	checa_resultado(Res, Restante, RespuestaSabio1, PrimerSombrero, ListaCombinaciones, Sombreros) :- diferencia_lista(Res, Restante, Ultimos), imprimeResultado(Ultimos, ResM),<br />
		primer_sabio(RespuestaSabio1, ResM, Sombreros, PrimerSombrero, ListaCombinaciones).<br />
	compara_todo([]).<br />
	compara_todo([X]).<br />
	compara_todo([X,X|Xs]) :- compara_todo([X|Xs]).</p>
<p>	diferencia(_,[],[]) :- !.<br />
	diferencia(Color,[Color|T],T) :-!.<br />
	diferencia(Color,[H|T],Res) :- diferencia(Color,T,Res1),Res=[H|Res1].</p>
<p>	diferencia_lista(_, [], []) :- !.<br />
	diferencia_lista([], Lista, Lista) :- !.<br />
	diferencia_lista([X], Lista, Resultado) :- diferencia(X, Lista, Res1), Resultado = Res1.<br />
	diferencia_lista([H|T], Sombreros, Resultado) :- diferencia(H, Sombreros, Result), diferencia_lista(T, Result, Resul21), Resultado = Resul21.</p>
<p>	pregunta_segundo_sabio(Resultado, Sombreros, Respuesta):- write("Soy el segundo sabio y veo el sombrero del primer sabio de color:\n "),<br />
		readln(PrimerSombrero),write("con lo que se, creo que mmmm repasemos .... \n"),segundo_sabio(Respuesta, Resultado, PrimerSombrero, Sombreros).</p>
<p>	imprimeResultado([H|T], Resultado) :- compara_todo([H|T]), write("Entonces, si se cual es el color de mi sombrero,es muy fácil, mi sombrero es de color:  ", H), Resultado="si", nl,nl.<br />
	imprimeResultado(_, Resultado):- write("Mmmm no se aún, pregúntale a otro sabio\n"), Resultado="no", nl.<br />
	imprime_sombreros([]).<br />
	imprime_sombreros([H|T]	) :- write(H), nl, imprime_sombreros(T).</p>
<p>	start :- pregunta.</p>
<p>GOAL<br />
	start.</p>
<p>[/code]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novacreations.net/161-problema-de-los-3-sombreros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

