Top Banner
Defglobal y Deffunction Constructs Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo
24

Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Feb 03, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal y Deffunction Constructs

Luis Miguel Li LooLuis Miguel BurgosJorge Luis Ocampo

Page 2: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Permite declarar variables globales.

Sintaxis: (defglobal ?*<nombre_variable>* =

<valor>)

Ejemplo: (defglobal ?*x* = 5) (defglobal ?*y* = Hola)

Page 3: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Ejemplo trivial:

Defina 3 variables globales . Que la primera tenga un valor de 5, la segunda valga la suma de 3 más el valor de la primera y que la ultima tenga el valor de las 2 primeras variables multiplicadas.

Page 4: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Solución:

Page 5: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Asignando un valor a variables globales:

Función bind (Sintaxis):▪ (bind ?*<nombre_variable>* <valor> )▪ (bind ?*x* (+ 5 3) )

Redefinirla con defglobal.

Page 6: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Función Reset:

Haciendo uso de (reset) las variables globales vuelven a su valor asignado originalmente.

A su vez, las variables locales son eliminadas al hacer uso del (reset).

Sintaxis:▪ (reset)

Page 7: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Ejemplo Trivial:

Cree 2 variables globales con valores distintos. Modifique el valor de cada una. Súmelas, aplique (reset) y súmelas de nuevo. ¿Serán distintos los resultados?

Page 8: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Ejemplo de solución:

25≠9

Page 9: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Función undefglobal:

Elimina la variable global indicada.

Sintaxis: (undefglobal <nombre_variable>)

Ejemplo: (defglobal ?*a* 5) (undefglobal a)

Page 10: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Definiendo un arreglo global (multifield): Sintaxis:▪ (defglobal ?*<nombre>* = (create$

<valor1> <valor2> …. <valorN>)) Ejemplo:

Page 11: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Excepciones de uso: No se puede poner una variable global

como parámetro de una función

Page 12: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Defglobal Construct

Excepciones de uso: No se puede usar exactamente de la

misma manera que una variable local en el LHS de un defrule. No activan el pattern-matching en una regla.

Ejemplos:

(defrule example(fact ?*x*)=>)

(defrule example(fact ?y&:(> ?y ?*x*))=>)

Page 13: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Deffunction Construct

Permite crear funciones.

Sintaxis: (deffunction <nombre_funcion>

(<parametros>)(<Contenido>)

Ejemplo: (deffunction MiFuncion ()

(printout t “No hago nada” crlf ))

Page 14: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Deffunction Construct

Ejemplo MUY trivial: Realice una función que dado 2

números, imprima la suma y la resta.

Page 15: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Deffunction Construct

Solución:

Page 16: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Deffunction Construct

Ejemplo relativamente trivial: Crear los siguientes templates:▪ Vaso ▪ Fabricante - STRING▪ Antigüedad - INTEGER

▪ Plato▪ Material – STRING▪ Diametro – INTEGER

Realizar una función que reciba un string y un integer que, dependiendo del valor de la variable global ?*var* (1 ó 2), inserte un hecho con un template distinto. (Si es 1, inserta un vaso, por ejemplo)

Page 17: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Deffunction Construct

Solución Declaramos la variable global y los

templates

Creamos la función

Page 18: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Leer datos de consola: (read) Sintaxis:▪ (bind ?<nombre_variable> (read))

Ejemplo:▪ (bind ?x (read))

Page 19: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Función While: Sintaxis:▪ (while (<Condición>)

(<Contenido>))

Ejemplo:▪ (bind ?a 1) (while (not ( = ?a 5 )) (printout t ?a crlf) (bind ?a (+ ?a 1))

Page 20: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Función Random: Sintaxis:▪ (random <Limite_Inferior>

<Limite_Superior>)

Ejemplo:▪ (random 1 5)

Page 21: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Ejemplo: Crear una función que lea 2 números,

halle un número aleatorio entre ellos e imprima los divisores del mismo.

Page 22: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Solución

Lectura de datos

Divisores

Page 23: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

Extra

Funciones para variables Multicampo: Nth$▪ Provee la posición de un elemento dentro de

una colección.▪ Sintaxis:▪ (nth$ <elemento> <colección>)

Member$▪ Informa si un elemento se encuentra dentro de

una colección.▪ Sintaxis:▪ (member$ <elemento> <colección>)

Page 24: Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

GRACIAS