Defglobal y Deffunction Constructs Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo
Defglobal y Deffunction Constructs
Luis Miguel Li LooLuis Miguel BurgosJorge Luis Ocampo
Defglobal Construct
Permite declarar variables globales.
Sintaxis: (defglobal ?*<nombre_variable>* =
<valor>)
Ejemplo: (defglobal ?*x* = 5) (defglobal ?*y* = Hola)
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.
Defglobal Construct
Solución:
Defglobal Construct
Asignando un valor a variables globales:
Función bind (Sintaxis):▪ (bind ?*<nombre_variable>* <valor> )▪ (bind ?*x* (+ 5 3) )
Redefinirla con defglobal.
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)
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?
Defglobal Construct
Ejemplo de solución:
25≠9
Defglobal Construct
Función undefglobal:
Elimina la variable global indicada.
Sintaxis: (undefglobal <nombre_variable>)
Ejemplo: (defglobal ?*a* 5) (undefglobal a)
Defglobal Construct
Definiendo un arreglo global (multifield): Sintaxis:▪ (defglobal ?*<nombre>* = (create$
<valor1> <valor2> …. <valorN>)) Ejemplo:
Defglobal Construct
Excepciones de uso: No se puede poner una variable global
como parámetro de una función
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*))=>)
Deffunction Construct
Permite crear funciones.
Sintaxis: (deffunction <nombre_funcion>
(<parametros>)(<Contenido>)
Ejemplo: (deffunction MiFuncion ()
(printout t “No hago nada” crlf ))
Deffunction Construct
Ejemplo MUY trivial: Realice una función que dado 2
números, imprima la suma y la resta.
Deffunction Construct
Solución:
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)
Deffunction Construct
Solución Declaramos la variable global y los
templates
Creamos la función
Extra
Leer datos de consola: (read) Sintaxis:▪ (bind ?<nombre_variable> (read))
Ejemplo:▪ (bind ?x (read))
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))
Extra
Función Random: Sintaxis:▪ (random <Limite_Inferior>
<Limite_Superior>)
Ejemplo:▪ (random 1 5)
Extra
Ejemplo: Crear una función que lea 2 números,
halle un número aleatorio entre ellos e imprima los divisores del mismo.
Extra
Solución
Lectura de datos
Divisores
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>)
GRACIAS