<div class="notebook"> <div class="nb-cell markdown" name="md1"> 1) Definición básica de hechos, reglas y consultas. </div> <div class="nb-cell program" name="p1"> humano(pepito). /** <examples> ?- kll */ mortal(X) :- humano(X). </div> <div class="nb-cell query" name="q1"> mortal(pepito). </div> <div class="nb-cell markdown" name="md2"> 2) Encontrar caminos en grafos dirigidos con Prolog </div> <div class="nb-cell program" name="p2"> arc(a,b). arc(b,c). arc(a,c). arc(a,d). arc(b,e). arc(e,f). arc(b,f). arc(f,g). path(X,Y):- arc(X,Y). path(X,Y):- arc(X,Z),path(Z,Y). pathall(X,X,[]). /** <examples> ?- kll */ pathall(X,Y,[X,Z|L]):- arc(X,Z),pathall(Z,Y,L). </div> <div class="nb-cell query" name="q2"> path(a,b). </div> <div class="nb-cell query" name="q3"> path(c,g). </div> <div class="nb-cell query" name="q4"> path(a,e). </div> <div class="nb-cell query" name="q5"> pathall(a,g,R). </div> <div class="nb-cell markdown" name="md3"> </div> <div class="nb-cell markdown" name="md4"> 3) Ejemplo serie fibonacci </div> <div class="nb-cell program" name="p3"> fib(0,0). fib(1,1). fib(X,Y):- X1 is X-1,X2 is X-2, fib(X1,Y1), fib(X2,Y2), /** <examples> ?- kll */ Y is Y1+Y2. </div> <div class="nb-cell query" name="q6"> fib(6, X). </div> <div class="nb-cell query" name="q7"> fib(21,X). </div> <div class="nb-cell markdown" name="md5"> 4) Ejemplo juego de ahorcado en Prolog </div> <div class="nb-cell program" name="p4"> in_mind([l,o,v,e]). start:- write('Guess first letter'),read(X), in_mind([X|T]),write('OK. '),guess(T). guess([]):- write('Congratulations! The word is '),in_mind(W),write(W),!. guess(L):- repeat,write('Next letter'),read(X), ((L=[X|T1],write('OK. '),guess(T1)); /** <examples> ?- kll */ (write('Fail. Try again!'),guess(L))). </div> <div class="nb-cell query" name="q8"> start </div> <div class="nb-cell markdown" name="md6"> 5) Ejemplo simple de procesamiento de lenguaje natural en Prolog. </div> <div class="nb-cell program" name="p5"> articulo([el]). nombre([gato]). nombre([perro]). nombre([pescado]). nombre([carne]). verbo([come]). sintagma_nominal(SN) :- nombre(SN). sintagma_nominal(SN) :- articulo(A), nombre(N), append(A, N, SN). sintagma_verbal(SV) :- verbo(V), sintagma_nominal(SN), append(V, SN, SV). oracion(O) :- sintagma_nominal(SN), sintagma_verbal(SV), /** <examples> ?- kll */ append(SN, SV, O). </div> <div class="nb-cell query" name="q9"> oracion([perro,come,perro]). </div> <div class="nb-cell query" name="q10"> oracion([gato,come,pescado]). </div> <div class="nb-cell markdown" name="md7"> 6) Ejemplo de bases de datos de relaciones familiares </div> <div class="nb-cell program" name="p6"> es_padre(terach, abraham). es_padre(terach, nachor). es_padre(terach, haran). es_padre(abraham, isaac). es_padre(haran, lot). es_padre(haran, milcah). es_padre(haran, yiscah). es_madre(sarah, isaac). es_hombre(terach). es_hombre(abraham). es_hombre(nachor). es_hombre(haran). es_hombre(isaac). es_hombre(lot). es_mujer(sarah). es_mujer(milcah). es_mujer(yiscah). es_hijo(X,Y) :- es_padre(Y,X), es_hombre(X). es_hija(X,Y) :- es_padre(Y,X), es_mujer(X). /** <examples> ?- kll */ es_abuelo(X,Z) :- es_padre(X,U), es_padre(U,Z). </div> <div class="nb-cell query" name="q11"> </div> <div class="nb-cell query" name="q12"> es_padre(abraham, lot), es_hombre(lot). </div> <div class="nb-cell query" name="q13"> es_padre(abraham, X), es_hombre(X). </div> <div class="nb-cell query" name="q14"> es_padre(haran, X), es_mujer(X). </div> <div class="nb-cell program" name="p7"> orgulloso(X) :- padre(X,Y),recien_nacido(Y). padre(X,Y) :- papa(X,Y). papa(juan,ana). recien_nacido(ana). </div> <div class="nb-cell query" name="q16"> orgulloso(ana) </div> <div class="nb-cell query" name="q15"> orgulloso(juan) </div> </div>