Luis Miguel Li Loo Luis Miguel Burgos Jorge Luis Ocampo
Permite declarar variables globales. Sintaxis: (defglobal ?* * = ) Ejemplo: (defglobal ?*x* = 5) (defglobal ?*y* = Hola)
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.
Solución:
Asignando un valor a variables globales: Función bind (Sintaxis): (bind ?* * ) (bind ?*x* (+ 5 3) ) Redefinirla con defglobal.
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)
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?
Ejemplo de solución: 259
Función undefglobal: Elimina la variable global indicada. Sintaxis: (undefglobal ) Ejemplo: (defglobal ?*a* 5) (undefglobal a)
Definiendo un arreglo global (multifield): Sintaxis: (defglobal ?* * = (create$ …. )) Ejemplo:
Excepciones de uso: No se puede poner una variable global como parámetro de una función
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*)) =>)
Permite crear funciones. Sintaxis: (deffunction ( ) ( ) Ejemplo: (deffunction MiFuncion () (printout t No hago nada crlf ))
Ejemplo MUY trivial: Realice una función que dado 2 números, imprima la suma y la resta.
Solución:
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)
Solución Declaramos la variable global y los templates Creamos la función
Leer datos de consola: (read) Sintaxis: (bind ? (read)) Ejemplo: (bind ?x (read))
Función While: Sintaxis: (while ( ) ( )) Ejemplo: (bind ?a 1) (while (not ( = ?a 5 )) (printout t ?a crlf) (bind ?a (+ ?a 1))
Función Random: Sintaxis: (random ) Ejemplo: (random 1 5)
Ejemplo: Crear una función que lea 2 números, halle un número aleatorio entre ellos e imprima los divisores del mismo.
Solución Lectura de datos Divisores
Funciones para variables Multicampo: Nth$ Provee la posición de un elemento dentro de una colección. Sintaxis: (nth$ ) Member$ Informa si un elemento se encuentra dentro de una colección. Sintaxis: (member$ )