MENU. pausa :- nl,write('Pulsa <Enter> para continuar '), skip(10). pausa1 :- nl,write('Pulsa <Enter> para confirmar el pedido '), skip(10). borraPantalla :- borraLinea(25). borraLinea(1) :- !,nl. borraLinea(N) :- nl,N1 is N-1,borraLinea(N1). escribe([]). escribe([X|Y]):put(X), escribe(Y). error:borraPantalla, escribe("La opción seleccionada no esta disponible"), nl, escribe("O el número escrito es incorrecto"), pausa. salida:borraPantalla, escribe("|-----------Universidad Jean Piaget--------------------|"),nl, escribe("|-------Ingenieria en Sistemas Computacionales --------|"),nl, escribe("|---------López Marin Ramon Alfredo--------------------|"),nl, escribe("|-----------Inteligencia Artificial--------------------|"),nl, escribe("|--------¡Gracias Por Su Preferencia! -----------------|"),nl, pausa, halt. opciones(X):( (X = 1) -> escribe("Mole verde de pollo"),nl, escribe("Sopa de espaguetti"),nl, escribe("frijoles"),nl, escribe("Refresco de 600 ml"),nl, pausa1; (X = 2) -> escribe("Pechuga rellena de pollo"),nl, escribe("Sopa de espaguetti"),nl, escribe("Ensalada de manzana"),nl, escribe("Refresco de 600 ml"),nl, pausa1; (X = 3) -> escribe("Carne de puerco en salsa de jitomate"),nl, escribe("Sopa de arroz"),nl, escribe("Frijoles"),nl, escribe("Refresco de 600ml"),nl, pausa1; (X = 4) -> salida; error). menu:borraPantalla, escribe("-------Restaurant Eclipse---------"),nl, escribe("----------Menu del día--------------"),nl, escribe("Seleccione Su Menu:"),nl, tab(10),escribe("1) Menu 1"),nl, tab(10),escribe("2) Menu 2"),nl, tab(10),escribe("3) Menu 3"),nl, tab(10),escribe("4) Finalizar Pedido"),nl, escribe("Escribe el número del menu deseado: "), read(X), opciones(X), menu. ?-menu. ANIMAL /* ADIVINO EL ANIMAL EN EL QUE ESTAS PENSANDO Para empezar el juego, teclea: " ?- start." */ /*Comienza el juego*/ /*Para implementar el juego partiremos de un árbol en el que tendremos todos los animales que podemos adivinar y las relaciones entre ellos*/ start :nl, write('PARA ADIVINAR EL ANIMAL EN EL QUE ESTAS PENSANDO, '), nl, write('RESPONDE A LAS SIGUIENTES PREGUNTAS'), nl, nl, sera(Animal), /*En primer lugar llamamos a la función hipótesis. Con esta función empezaremos en el nodo raíz e iremos avanzando en el árbol */ /*Cuando lleguemos a una hoja del árbol, habremos encontrado la respuesta*/ nl, nl, write('****************************************'), nl, write('Creo que el animal es '), write(Animal), nl, write('****************************************'), nl, nl, /*Aprendizaje de nuestro programa*/ /*Comprobamos si hemos acertado el animal*/ write('¿He acertado? (s/n) '), read(Respuesta), nl, /*En el caso de no haber acertado, intentamos introducir una regla para su aprendizaje*/ ( (Respuesta == s) -> borrar, seguir_jugando ; write('¿Qué animal es? '), read(Respuesta1), nl, write('Dime una pregunta para '), write(Respuesta1), write(' que lo diferencie de '), write(Animal), write(': '), read(Respuesta2), nl, nl, asserta( (sera(Respuesta1) :- Animal, verificar(Respuesta2)) ) , borrar, seguir_jugando). /* Hipótesis de animales que se van a comprobar */ sera(rana) :- rana, !. sera(salamandra) :- salamandra, !. sera(serpiente) :- serpiente, !. sera(tortuga) :- tortuga, !. sera(cocodrilo) :- cocodrilo, !. sera(jirafa) :- jirafa, !. sera(conejo) :- conejo, !. sera(hombre) :- hombre, !. sera(oso) :- oso, !. sera(tigre) :- tigre, !. sera(leon) :- leon, !. sera(aguila) :- aguila, !. sera(pato) :- pato, !. sera(gallina) :- gallina, !. sera(avestruz) :- avestruz, !. sera(pinguino) :- pinguino, !. sera(carpa) :- carpa, !. sera(pez_espada):- pez_espada. /* Reglas con las que identificaremos los distintos animales */ /*Anfibios*/ rana :- sangre_fria, anfibio, verificar(salta). salamandra :- sangre_fria, anfibio. /*Reptiles*/ serpiente :- sangre_fria, verificar(se_arrastra). tortuga :- sangre_fria, verificar(tiene_caparazon). cocodrilo :- sangre_fria. /*Mamíferos*/ jirafa :- mamifero, herbivoro, verificar(tiene_cuello_largo). conejo :- mamifero, herbivoro. hombre :- mamifero, omnivoro, verificar(razona). oso :- mamifero, omnivoro. tigre :- mamifero, verificar(tiene_rayas). leon :- mamifero. /*Aves*/ aguila :- ave, voladora, verificar(es_ave_rapaz). pato :- ave, voladora. gallina :- ave, verificar(es_domestico). avestruz :- ave, verificar(corre_veloz). pinguino :- ave. /*Peces*/ carpa :- verificar(vive_rio). pez_espada. /* Reglas con las que clasificaremos los animales en: anfibios, reptiles, mamíferos, aves y peces */ /* Para ello utilizaremos la función verificar */ sangre_fria :- verificar(tiene_sangre_fria). anfibio :- verificar(vive_tierra_y_agua). mamifero :- verificar(tiene_pelo). herbivoro :- verificar(es_herbivoro). omnivoro :- verificar(es_omnivoro). ave :- verificar(tiene_alas). voladora :- verificar(vuela). /* Función verificar, desde aquí llamaremos a la función que preguntara por cada característica */ verificar(S) :(cumple(S) -> true ; (no_cumple(S) -> fail ; preguntar(S))). /* Para avanzar por el árbol, se irán realizando preguntas con las distintas características. Esto lo haremos con la función preguntar*/ preguntar(Pregunta) :write('¿Tiene el animal la siguiente característica: '), write(Pregunta), write('? (s/n) '), read(Respuesta), nl, /*Avanzamos en función de la respuesta a la característica, hacia una rama u otra del árbol */ /*Con assert, guardamos el camino seguido */ ( (Respuesta == s) -> assert(cumple(Pregunta)) ; assert(no_cumple(Pregunta)), fail). seguir_jugando :/*Ofrecemos la oportunidad de volver a jugar otra vez*/ write('¿Quieres seguir jugando? '), read(Respuesta3), ( (Respuesta3 == s) -> start ; nl, nl, write('ESPERO QUE HAYAS DISFRUTADO JUGANDO CONMIGO'), nl, nl, write('ADIOS'), nl). /*Hace dinámicas las funciones que se van a añadir con assert*/ :- dynamic cumple/1,no_cumple/1,sera/1,verificar/1. /* Borramos todos los valores almacenados con assert que indican el camino seguido en el árbol */ borrar :- retract(cumple(_)),fail. borrar :- retract(no_cumple(_)),fail. borrar.