Bienvenidos a Nuestro Mundo - A Proyectos Beta!

En nuestra vida, desde que nacemos todo lo probamos, ensayamos y testeamos; así también erramos, caemos pero por sobre todo aprendemos. Es decir, todo lo que hacemos forma parte de una nueva experiencia, de un PROYECTO. El que siempre exista la posibilidad de mejorarlo es lo que lo convierte en BETA. En este blog queremos compartir contenidos de tipo informático con artículos de programación, software libre y propietario, redes, base de datos, noticias, experiencias, etc... y también de humor. Es un sitio de todos y para todos. Participá! Sos importante ...

Algunos ejemplos en Prolog


Cuando tenia que resolver varios ejercicios en Prolog, buscaba códigos fuentes para poder entender el lenguaje. Muchas veces encontraba pero no estaban bien. El IDE para Prolog que utilizaba era SWI-Prolog. Era muy sencillo de utilizar y lo pueden descargar en su pagina oficial.
El IDE es multiplataforma como también es software libre.
Les dejo algunos ejemplos. Si necesitan más códigos fuentes, pídanme que los alzare. Solo pongo algunos.
Obs: Copien el archivo como esta y guarden como "ejemplosVarios.pl" y hagan doble clic en el código fuente para poder acceder al IDE y poder probar el programa.

Código fuente en Prolog

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 1: 
% Supongamos que tenemos el siguiente conocimiento sobre 
% divisibilidad:
%   " 2 divide a 6"
%   " 2 divide a 12"
%   " 3 divide a 6"
%   " 3 divide a 12"
%   " Si un número es divisible por 2 y por 3 entonces es 
%     divisible por 6"
%
% Escribir un programa que represente este conocimiento y usarlo 
% para responder a las siguientes preguntas:
% (1) ¿Existe algún múltiplo de 2?
% (2) ¿Cuáles son los divisores de 6?
% (3) ¿Conocemos algún múltiplo de 6?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

divide(2,6).
divide(2,12).
divide(3,6).
divide(3,12).
divide(6, X):-
 divide(2, X),
 divide(3, X).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 2: En este ejercicio y los siguientes vamos a 
% realizar un ejemplo que describe la carta de un restaurante. 
% Los objetos que interesan son los platos que se pueden consumir 
% y una primera clasificación puede ser la siguiente:
% * Entradas: paella, gazpacho, consomé
% * Carne: filete de cerdo, pollo asado
% * Pescado: trucha, bacalao
% * Postre: flan, nueces con miel, naranja
%
% Escribe como programa Prolog la clasificación de comidas   
% del restaurante. El programa constara de 10 cláusulas y los 
% predicados a usar son entrada/1, carne/1, pescado/1 y postre/1.     
% Prueba después el programa con preguntas como                            
%    ?- carne(X).                                                         
%    ?- carne(X), postre(X).                                                
%     ... etc...                                                          
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

entrada(paella).
entrada(gazpacho).
entrada(consome).
carne(filete_de_cerdo).
carne(pollo_asado).
pescado(trucha).
pescado(bacalao).
postre(flan).
postre(nueces_con_miel).
postre(naranja).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 3: Definir la relación "plato_principal(X)" que 
% indicara que un plato principal es un plato de carne o de 
% pescado.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

plato_principal(X):-
 carne(X).
plato_principal(X):-
 pescado(X).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 4: Definir la relación "comida(X,Y,Z)" que indicara 
% que la comida consta de tres platos, una entrada "X", un plato  
% principal "Y" y un postre "Z". 
% Pidiéndole respuestas sucesivas a la pregunta ?- comida(X,Y,Z).
% podemos generar todas las posibles comidas del restaurante.  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

comida(X, Y, Z):-
 entrada(X),
 plato_principal(Y),
 postre(Z).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 5: 
% (a) ¿Cómo se pregunta por las comidas con pescado sin modificar 
%     el programa? comida(X, Y, Z), pescado(Y).
% (b) ¿Cómo se pregunta por las comidas con naranja sin modificar 
%     el programa? comida(X, Y, naranja).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 6: Para completar un poco la información que tenemos 
% sobre las comidas del restaurante vamos a mirar la lista de las 
% calorías que aporta cada plato: 
% * Una ración de paella aporta 200 calorías           
% * Una ración de gazpacho aporta 150 calorías         
% * Una ración de consomé aporta 300 calorías          
% * Una ración de filete de cerdo aporta 400 calorías  
% * Una ración de pollo asado aporta 280 calorías      
% * Una ración de trucha aporta 160 calorías           
% * Una ración de bacalao aporta 300 calorías          
% * Una ración de flan aporta 200 calorías             
% * Una ración de nueces con miel aporta 500 calorías  
% * Una ración de naranja aporta 50 calorías           
%
% Definir la relacion "calorias(X,N)" que indicará  que una 
% ración de "X" tiene "N" calorías.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

calorias(paella, 200).
calorias(gazpacho, 150).
calorias(consome, 300).
calorias(filete_de_cerdo, 300).
calorias(pollo_asado, 280).
calorias(trucha, 160).
calorias(bacalao, 300).
calorias(flan, 200).
calorias(nueces_con_miel, 500).
calorias(naranja, 50).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 7: Definir la relacion "valor_calorico(X,Y,Z,V)"  
% que indicará que la comida comida(X,Y,Z) suma en total "V" 
% calorías.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

valor_calorico(X, Y, Z, V):-
 comida(X, Y, Z),
 calorias(X, V1),
 calorias(Y, V2),
 calorias(Z, V3),
 V is V1+V2+V3.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 8: Definir la relacion "comida_equilibrada(X,Y,Z)" 
% que indicará que la comida comida(X,Y,Z) no supera las 800 
% calorías.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

comida_equilibrada(X, Y, Z):-
 valor_calorico(X, Y, Z, V),
 V<800.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ejercicio 9:
% Considera el siguiente programa que describe algunas relaciones 
% familiares

padre(andres,bernardo).
padre(andres,belen).
padre(andres,baltasar).
padre(baltasar,david).
padre(david,emilio).
padre(emilio,francisco).
madre(ana,bernardo).
madre(ana,belen).
madre(ana,baltasar).
madre(belen,carlos).
madre(belen,carmen).

% extender el programa para definir las siguientes relaciones 
% familiares
% (9.1) abuelo/2
% (9.2) progenitor/2
% (9.3) nieta/2
% (9.4) antepasado/2
% (9.5) descendiente/2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

abuelo(X, Y):-
 padre(X, Z),
 padre(Z, Y).
abuelo(X, Y):-
 padre(X, Z),
 madre(Z, Y).
progenitor(X, Y):-
 padre(X, Y).
progenitor(X, Y):-
 madre(X, Y).
mujer(belen).
mujer(ana).
mujer(carmen).
nieta(X, Y):-
 mujer(X),
 progenitor(Y, Z),
 progenitor(Z, X).
antepasado(X, Y):-
 progenitor(X, Y).
antepasado(X, Y):-
 progenitor(X, Z),
 antepasado(Z, Y).
descendiente(X, Y):-
 antepasado(Y, X).

19 comentarios:

Unknown dijo...

EXCELEEEEENTE!!! esto me va a servir muchisimo!!! gracias josego!!!

proyectosbeta dijo...

@RomiOmi de nada. Cuando necesites ayuda avisa nomas. Puse algunos ejemplos pero tengo más.
Saludos

Anónimo dijo...

Vas a ayudar a planear una comida de tres platos para un Seminario del Departamento de Informática. Los estudiantes y los profesores son de muy diversos países, y al chef le gustaría hacer la comida verdaderamente internacional: los tres platos/comidas (aperitivo, un plato principal y el postre) deberán proceder de países diferentes. Además, aplican las siguientes reglas:

1. La comida debe incluir ya sea un plato chino o egipcio.
2. Si se elige un aperitivo indio, se debe elegir un postre de Corea.
3. Si se elige un plato chileno, no se puede servir ningún plato mexicano.
4. Si se elige un plato vietnamita, el plato principal debe ser chino.
5. Un plato coreano no se puede servir antes de un plato egipcio.
6. El aperitivo no puede ser chino.
7. Los alimentos egipcios y vietnamitas no son seguros juntos.
8. De todos los platos chilenos sólo vale la pena comer postres.
9. La comida de la India es mejor con un aperitivo de Corea. Esto implica que, además, la comida india no puede ser un aperitivo.
10. Los postres mexicanos no son muy grandes.
11. Si los alimentos chinos y coreanos se sirven juntos, más vale que el plato principal sea coreano.
12. Un plato principal mexicano y comida egipcia son los mejores seguido por el postre de Corea. Esto significa que: Un plato principal de México, cuando se sirve con aperitivo egipcio, necesita un postre de Corea.
13. La comida china y chilena debe tener un aperitivo de la India. Esto significa que si los alimentos chinos y chilenos se sirven juntos, se necesita un aperitivo de la India.
14. Un aperitivo de México debe tener un postre de Corea.
15. La comida chilena debe ser servida con un plato principal chino. Esto significa que el alimento chileno se sirve si y sólo si se sirve un plato principal chino. (Aquí hay una doble implicación: el plato principal chino implica un poco de comida chilena, y la comida chilena implica plato principal chino.)

Por favor, asiste a la planificación del chef de esta comida, proporcionando una función/predicado de Prolog comida(A, E, D), que devuelva todas las soluciones posibles a este problema. (Hay tres soluciones.) Podría ser una buena idea descomponer este problema en un conjunto de cláusulas, y probar cada cláusula por separado. Esto es mucho más fácil que tratar de escribir una declaración gigantesca.

El predicado comida(A, E, D) producirá "Sí" si se le da un conjunto correcto de opciones de comida, y "No" para un conjunto que no es deducible o bien que no es correcto.

Anónimo dijo...

yo se como se hace ese ejercicio mandame un mail
y te cuento.

se despide Mario B.

Unknown dijo...

Hola Mario B. mi nombre es Francisco, me gustaria la solución del ejercício anterior, es muy importante, porque es muy identico a otro que me encargarron, eso si lo tengo en ingles.
mi correo es fco.h.martinez@gmail.com
estaria bien chido si me ayudaras..

proyectosbeta dijo...

@Mario B. no se si sos mi ex compañero de la facu o eres otro. Podrías facilitarme a mi correo (josego85@gmail.com o al proyectosbeta@gmail.com) o dejarme tus datos y me comunico contigo. Asi le facilito a @franciso o si no hazolo tu mismo.
@francisco: Hace rato no utilizo más prolog por eso no te puedo ayudar pero estoy viendo que últimamente se esta solicitando mucho esta clase de ejercicios.
Si tienes alguna información del ejercicio o la tienes podrías avisarme. Muchas gracias.
saludos, josé

Unknown dijo...

@proyectosbeta, Mario B. al final me respondio y era una joda.. asi que no cuenten con el... pero si alguien sabe porfavor o tu proyectosbeta, comenten el ejercicio..
gracias..

proyectosbeta dijo...

@francisco: que lastima realmente. Claro que si se de algo te aviso si o si..
saludos, josé

Anónimo dijo...

Podrian ayudarme a encontrar la pareja ideal en prologe teniendo esta información:
• Elena: muy muy alta, morena, alrededor de 40 años.
• Lola: alta, morena, alrededor de 40 años, tímida.
• Patricia: alta, morena, alrededor de 40 años.
• Sandra: alta, morena, alrededor de 30 años.
• Susana: alta, morena, alrededor de 20 años.
• Julia: alta, morena, alrededor de 18 años, universitaria.
• Cristina: alta, morena, alrededor de 18 años.
• Ana: alta, pelirroja, alrededor de 18 años.
• Silvia: alta, rubia, alrededor de 30 años.
• María: alta, rubia, alrededor de 20 años.
• Adelaida: baja, delgadita, alrededor de 40 años.
• Paloma: baja, delgadita, alrededor de 20 años.
• Alicia: baja, gordita, elegante, alrededor de 40 años.
• Flor: baja, gordita, hippie, alrededor de 40 años.
• África: baja, gordita, hippie, alrededor de 30 años.
• Lorena: baja, gordita, alrededor de 40 años.
• Sonia: baja, gordita, alrededor de 30 años.
Gracias !

Anónimo dijo...

copie en el codigo fuente el ejercicio 7,8,9 y no me sale..........marca errores xq???

proyectosbeta dijo...

@Anónimo (17 de mayo de 2011 - 21:15): Especificamente que error te sale?

Anónimo dijo...

me gustaria saber donde esta la pestañana para bajar el codigo fuente :D

Anónimo dijo...

Me interesa tener el codigo fuente del Ejecicio 2 p0rfaa me urgee; si puedes mandarmelo mi correo es martin_k02@hotmail.com thx ^^

Anónimo dijo...

Hola!!...bueno viendo el problema de los errores que te tienes al compilar el ejercicio 7, lo mas seguro es q tanto el 7 en adelante se emplea desde el dos, intenta poner la base de conocimiento desde el problema dos... otra cosa..TUS CODIGOS ME AYUDARON MUXO PROYECTOSBETA!!! ...gracias XD

Anónimo dijo...

Existen personas a quienes sus padres fuerzan a elegir una carrera. Es sabido que los buenos padres hacen lo mejor para sus hijos; pero los que fuerzan a elegir una carrera a otros no hacen lo mejor para ellos. Por lo tanto existen malos padres....UN PROBLEMILLA, AYUDA!

Concensionario Digital dijo...

Exelente aporte, me va a servir mucho para practicar y entender mejor el tema, apenas estoy entrando en la clase de progrmacion logica, si puedes enlazar mas seria perfecto,bueno y si me los puedes enviar a mi correo tambien x fa, es fausto1mayo@gmail.com

Anónimo dijo...

hola podrías explicarme cómo se hacen las inferencias quiero hacer un árbol genealógico

Anónimo dijo...

hola el profe de IA nos dejo una practica de encontrar una pareja ideal en prolog pero no se como hacer las regla
si tengo que poner en los hechos
los gustos de los involucrados tiene que ser hombre y mujer y se tienen que relacionar

Anónimo dijo...

Tengo que entregar una tarea extra de prolog y no tengo ni la mas minima idea de como se hace aqui les dejo el ejercicio para ver si me ayudan...
De una lista X obtener una lista Y con lo siguiente: la suma de los dos primeros elementos de X seran el primer elemento de Y, los dos elementos siguientes de Y serán sero y el resto los tres últimos elementos de X.
Ejemplo:
X ([5.4.6.7.8.9],Y)
y=[9.0.0.7.8.9]

E_Mail:emilio.duarte@umcc.cu

Publicar un comentario

Expresate y se crítico en tu vida. XD

Recibir Artículos Por Correo

Categorías

acertijos (1) adsense (1) adwords (1) AJAX (1) algoritmos (8) android (32) apple (5) autocad (1) base de datos (16) bash (1) becas (1) benchmark (1) blogger (2) blogs (27) bsd (1) buscadores (22) c# (1) CAD (1) camaras digitales (1) casting (1) CentOS (9) certificados (1) ciencia (1) CLEI (5) cloud computing (3) codigo fuente (9) Compiladores (4) Concursos (14) conferencias (24) congresos (6) consolas (7) criptografia (1) css (6) curso online (10) cursos (14) debian (50) Diseño (11) edicion video (7) emuladores (3) encuestas (2) entrevistas (9) ERTIC (1) etico (1) eventos (87) extjs (2) facebook (18) flash (2) flicker (1) FLISOL (13) geek (6) geoserver (2) GIMP (8) gis (29) Google (48) hacking (1) Hardware (30) haskell (3) HTML 5 (20) humor (261) imagenes (238) Ingenieria (14) internet (1) iphone (3) Java (42) Javascript (14) JQuery (3) juegos (36) libros (5) Linux (248) MAC (1) manga (2) Manuales (10) mapquest (1) MapServer (5) matematica (2) Microsoft (26) Microsoft Windows (27) Moviles (16) musicas (7) mysql (3) navegadores (41) newsletters (1) nokia (2) Noticias cientificas (7) Noticias Informaticas (39) Noticias varias (14) nube (1) openlayers (13) openstreetmap (10) opiniones (1) oracle (9) Paraguay (102) photoshop (1) Php (12) podcast (1) postgres (7) Programacion (135) prolog (1) proyectos (10) python (3) radio (6) Recursos (112) redes (10) Redes Sociales (62) resumenes (1) Revistas (57) ruby (2) seguridad (23) seminarios (6) sencha (2) SEO (3) Series (1) Silverlight (1) Sistema Operativo (27) smartphone (1) Software Libre (198) sun (2) tablet (19) tecnologia (24) tecnoPyensis (6) Testing (5) Trabajo (6) trucos (22) Twitter (29) Ubuntu (152) varios (113) videos (173) virtualizacion (14) visual basic net (2) web (86) wikipedia (1) Windows 7 (23) windows 8 (1) Windows XP (2) wordpress (5) xml (1)

Entradas Aleatorias

Seguidores

Últimos Comentarios

Archivos del Blog