{"id":78,"date":"2010-10-31T13:18:10","date_gmt":"2010-10-31T13:18:10","guid":{"rendered":"https:\/\/blogs.ua.es\/dar15\/?p=78"},"modified":"2010-10-31T13:25:55","modified_gmt":"2010-10-31T13:25:55","slug":"practica-sesion-6","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/dar15\/2010\/10\/31\/practica-sesion-6\/","title":{"rendered":"Pr\u00e1ctica sesi\u00f3n 6"},"content":{"rendered":"<p>Sesi\u00f3n correspondiente al mismo dia de teoria 26\/10\/2010.<\/p>\n<p>En la clase de hoy Carlos ha explicado diversos aspectos que voy a comentar a continuaci\u00f3n:<\/p>\n<ul>\n<li>\n<h2><strong>Funci\u00f3n random<\/strong><\/h2>\n<\/li>\n<\/ul>\n<p>La estructura de la funci\u00f3n random es \u2192 random(X), donde X ser\u00e1 el n\u00famero hasta el cual podremos llegar sin incluirlo a \u00e9l mismo, si ponemos 10 comenzar\u00e1 por el 0 y llegar\u00e1 hasta el 9.<\/p>\n<p>Ejemplo visto en clase:<\/p>\n<p>golpear(QUIEN):- F is random(10).<\/p>\n<p>Como se puede observar no empleamos F = random(10) porque el operador igual realiza asignaciones tomando en este caso random(10) como un \u00e1tomo. Para evitar esto usamos \u201cis\u201d que nos sirve para operaciones aritm\u00e9ticas.<\/p>\n<p>Pero a\u00fan asi hay un problema, si tenemos:<\/p>\n<p>vida(jugador, 25).<\/p>\n<p>Si se desea que al golpear al jugador se reste el n\u00famero generado por random a la vida actual del jugador, podriamos pensar que con lo siguiente resultar\u00e1:<\/p>\n<p>vida(QUIEN, X), Y is X-F.<\/p>\n<p>Ante esto tenemos que aclarar diversas cuestiones:<\/p>\n<p>-Ponemos Y porque no se puede usar X, no est\u00e1 permitido usar la misma variable a ambos lados.<\/p>\n<p>-Aunque puede parecer que el problema est\u00e9 resuelto, cuando restemos a X la F y mostremos Y (donde guardamos el resultado) nos aparecer\u00e1 el resultado correcto, pero si golpeamos nuevamente, los 25 de vida (vida inicial del personaje) no habr\u00e1n variado, no podemos modificar de esta forma un hecho mientras el programa est\u00e9 en ejecuci\u00f3n.<\/p>\n<p>Para poder arreglar este problema existen los predicados din\u00e1micos.<\/p>\n<ul>\n<li>\n<h2><strong>Predicados din\u00e1micos<\/strong><\/h2>\n<\/li>\n<\/ul>\n<p>\u00b7Nos permite a\u00f1adir o eliminar cl\u00e1usulas en nuestra base de conocimientos durante la ejecuci\u00f3n.<\/p>\n<p>\u00b7Se pueden a\u00f1adir y eliminar hechos o reglas de cualquier predicado que sea din\u00e1mico, aunque lo habitual es a\u00f1adir o eliminar hechos s\u00f3lamente.<\/p>\n<p>Nos permitir\u00e1n modificar los datos de nuestra base de conocimientos durante la ejecuci\u00f3n de nuestros programas.<\/p>\n<p>Existen distintos tipos de predicados din\u00e1micos y cada uno de ellos nos permitir\u00e1 modificar de una manera u otra nuestros programas en tiempo de ejecuci\u00f3n:<\/p>\n<p>1-<strong>dynamic<\/strong> \u2013 Nos permite crear predicados din\u00e1micos. \/\/ :-dynamic predicado\/aridad<\/p>\n<p>2-<strong>assert<\/strong> \u2013 Nos permite introducir hechos de un <strong>predicado din\u00e1mico. <\/strong>\/\/assert(predicado(Variable\/s)).<\/p>\n<p>3-<strong>listing<\/strong> \u2013 Nos lista todo el contenido de la base de conocimientos actualmente. Aunque nombre de forma distinta a las variables.<\/p>\n<p>4-<strong>retract<\/strong> \u2013 Elimina hechos existentes<strong> <\/strong>de un predicado<strong> <\/strong>de la base de conocimientos. \/\/ retract(predicado(Variable\/s).<\/p>\n<p>Si tratamos de borrar un hecho inexistente en nuestra base de conocimientos nos dir\u00e1 que \u201cNo\u201d, pues no es posible eliminar un hecho inexistente.<\/p>\n<p>Si ponemos ?-retract(predicado(_)) borrar\u00e1 el primero que encuentre.<\/p>\n<p>5-<strong>retractall<\/strong> \u2013 Elimina todos los hechos existentes de un predicado de la base de conocimientos. \/\/retractall(predicado(Variable\/s).<\/p>\n<p>6-<strong>abolish<\/strong> \u2013 Elimina todo absolutamente, tanto hechos como predicados din\u00e1micos. \/\/abolish predicado\/aridad.<\/p>\n<ul>\n<li>\n<h2><strong>Operador \u201c-&gt;\u201d<\/strong><\/h2>\n<\/li>\n<\/ul>\n<p>-Se asocia a la estructura condicional IF\u2026THEN\u2026ELSE<\/p>\n<p>\u201ca \u2192 c\u201d es igual a IF \u201ca\u201d THEN \u201cc\u201d<\/p>\n<p>\u201ca \u2192 c; e\u201d es igual a IF \u201ca\u201d THEN \u201cc\u201d ELSE \u201ce\u201d<\/p>\n<p>-Es similar a \u201c(a, c); e\u201d.<\/p>\n<p>-Si alguna de las partes tuviera m\u00e1s de 1 objeto se deben usar par\u00e9ntesis.<\/p>\n<p>Ejemplo: (a, b) \u2192 (c, d);(e, f)<\/p>\n<p>Como se puede observar ponemos \u201ca\u201d y \u201cb\u201d entre par\u00e9ntesis, al igual que las variables de las otras dos partes.<\/p>\n<p>-Si la estructura est\u00e1 contenida en el interior de una regla, para no afectar al resto introducimos toda la estructura entre ( ).<\/p>\n<p>Ejemplo: b, (a \u2192 c; e), f<\/p>\n<p>Esto es todo!!! que no es poco<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sesi\u00f3n correspondiente al mismo dia de teoria 26\/10\/2010. En la clase de hoy Carlos ha explicado diversos aspectos que voy a comentar a continuaci\u00f3n: Funci\u00f3n random La estructura de la funci\u00f3n random es \u2192 random(X), donde X ser\u00e1 el n\u00famero hasta el cual podremos llegar sin incluirlo a \u00e9l mismo, si ponemos 10 comenzar\u00e1 por [&hellip;]<\/p>\n","protected":false},"author":1754,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-78","post","type-post","status-publish","format-standard","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/posts\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/users\/1754"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":4,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/posts\/78\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/dar15\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}