Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

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

Transcript of Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo.

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