Fundamentos de Inteligencia Artificial

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
¿Cómo hacer para que una máquina comprenda el LN?
Unidad II Interfaces Hombre Máquina
MÉTODOS Y ELEMENTOS DE PROGRAMACIÓN
Resolución de Problemas Algoritmos y Programación
INSTITUTO TECNOLOGICO DE MINATITLAN
Técnico en programación de Software
M.C. Juan Carlos Olivares Rojas
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS NOTA IMPORTANTE: Para complementar.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
Introducción a la programación
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Teoría de lenguajes y compiladores
CAPITULO 2 La Representación del Conocimiento
METODOLOGIA DE LA PROGRAMACION
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Logic M.C. Juan Carlos Olivares Rojas February, 2009.
Unidad III Programación Funcional
Tema 6: Clases Antonio J. Sierra.
PROGRAMACIÓN LÓGICA.
Sistemas Evolutivos Introduccion.
VHDL.
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
M.C. Juan Carlos Olivares Rojas
Robotic M.C. Juan Carlos Olivares Rojas April, 2009.
Semana 5 Subprogramas..
Reglas y Encadenamiento de Reglas
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
M.C. Juan Carlos Olivares Rojas

BASES DE DATOS Con Access.
ESTRUCTURA DE DATOS ESD-243
Agenda Clase 16 Motivación e Historia de la Programación Funcional y la Programación Lógica. Concepto y Características de la Programación Funcional. Ventajas.
Diseño de algoritmos La computadora puede realizar procesos y darnos resultados, sin que tengamos la noción exacta de las operaciones que realiza. Con.
COMPONENTES DE UN ALGORITMOS
Material de apoyo Unidad 4 Estructura de datos
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Fundamentos de Inteligencia Artificial
INTEGRANTES LINA JIMÉNEZ LOZANO ROSA ELENA REINA CARLOS VILLADIEGO MARIANO SEPULVEDA.
LENGUAJES DE PROGRAMACIÓN
Introducción a la programación
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Elementos básicos del lenguaje
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
INTRODUCCIÓN A LA INTELIGENCIA ARTIFICIAL Y LOS SISTEMAS EXPERTOS
Introducción a la Robótica
TEMA 9: DIAGRAMA DE CLASE EN UML
Términos algoritmo diseñar algoritmo implementar algoritmo
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Metodología de la programación
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
ALGORITMO QUE ES ??.
PRINCIPIOS DE PROGRAMACIÓN
Elaboración de algoritmos usando lógica de programación
Presente un cuestionario con los aspectos mas importantes sobre los
Lic. Carla Aguirre Montalvo
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Programación Java y Desarrollo de Aplicaciones Modulo 1 Arquitectura de ordenadores Tema 3 Programas.
Lenguaje de Programación LISP
 Panorama General Fundamentos de Programación M.I. Jaime Alfonso Reyes Cortés.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
Cómo empezar Java. ¡Cómo se divide la plataforma de desarrollo de Java?  Edición estándar (JSE)  Edición empresarial (JEE)  Edición de dispositivos.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Departamento de Informática Universidad Técnica Federico Santa María Lenguajes Funcionales Francisco Bórquez Departamento de Informática Universidad Técnica.
Transcripción de la presentación:

Fundamentos de Inteligencia Artificial M.C. Juan Carlos Olivares Rojas

Agenda 2.1 Introducción 2.2 Representación del Conocimiento 2.3 Sistemas Expertos

Introducción La Inteligencia Artificial pretende emular la Inteligencia Humana a través del uso de computadoras La Inteligencia es la capacidad para resolver problemas de cualquier tipo. “La inteligencia distingue al hombre del animal”

Introdcción A los sistemas inteligentes existentes les falta el sentido común y la generalidad de los seres humanos. Alan M. Turing definió en 1950 una forma de comprobar si una máquina piensa, esto lo hizo a través del Test de Turing.

Introducción Consiste en colocar dos hombres y una computadora en un lugar en el cual no estén visibles los tres elementos, se ocultan las identidades. Uno de los participantes funciona como interrogador. La prueba se pasa cuando el interrogador no sabe distinguir entre las respuestas de la computadora y del otro hombre.

Introducción

Introducción Extracto del diálogo del Ensayo de Turing: P: Por favor, redacte un soneto sobre el tema del Fuerte Bridge R: No me incluya. Nunca pude escribir poesía. P: Sume 34957 y 70764 R: (Pausa de 30s seguida de la respuesta) 105621 ….

Introducción La IA se ha desarrollado desde mucho tiempo atrás. Aristóteles comenzó a explicar y codificar ciertos estilos de razonamientos como el deductivo. Los filósofos griegos ayudaron a plantear la lógica clásica. El Silogismo se convierte en la primera gran herramienta de la IA. P->Q y Q->S = P->S

Introducción En 1956 John McCarthy definió el concepto de IA y es considerado el padre de la misma. Muchos investigadores han hecho aportaciones valiosísimas a este campo, como Chomsky (Lenguajes), Rosenblat (Perceptrón), Alan Turing (Autómatas), etc.

Aplicaciones Sistemas expertos Procesamiento de lenguaje natural Visión Artificial Robótica Aprendizaje Lógica Clásica y Difusa Juegos Redes neuronales Algoritmos genéticos Realidad virtual

Representación del Conocimiento La características más importante que deben de tener todo Sistemas Inteligente (SI) son: La forma de representar el conocimiento La forma en cómo se recupera la información La forma en como se puede adquirir nuevo conocimiento (aprendizaje).

Representación del Conocimiento Las formas de representación (“explicitación”) de conocimiento son muy variadas y de ellas dependerá la forma en que se recupere la información y el cómo se aprende. Siempre que se desarrolla un modelo se tiene dos representaciones: lógica y física. Dichas representaciones se necesitan “mapearse” para poder trabajar en conjunto.

Representación del Conocimiento Cuando se tiene un problema de la vida real, éste debe mapearse al esquema de una computadora para poderse realizar un sistema computacional. Imaginemos que deseamos desarrollar un juego de laberintos (modelo físico), ¿Cómo quedaría representado su conocimiento (modelo )?

Representación del Conocimiento Se puede representar como una matriz, como un grafo, máquinas de estado finito, etc. Además, se deben tener reglas de cómo es el juego. Sino tenemos las dos representaciones no podemos comprender ni aprender el juego.

Representación del Conocimiento Las redes semánticas son una forma sencilla de explicitar conocimiento, están conformadas por grafos que codifican el conocimiento en forma taxonómica. Los nodos nos representan categorías y las aristas relaciones entre esas categorías. Existen dos tipos de relaciones muy especiales Is-A y la Have-A.

Representación del Conocimiento Se puede acceder a través de cada uno de los conceptos para inferir conocimiento. Los guiones (script) son otra forma de representar conocimiento. Están conformados por componentes llamados “ranuras” (slots) que es un conjunto de pares atributo-valor. Los guiones son más fáciles de introducir en muchos casos que un mapa conceptual.

Representación del Conocimiento El mismo conocimiento puede estar estructurado en diferentes representaciones como por ejemplo una base de datos, una red semántica, un frame, un mapa conceptual, etc. Pero al final de cuentas deben tener el mismo significado (semántica).

Red Semántica

Redes Semánticas Ejemplo de un guión: Impresoras Subconjunto_de: Máquina_Oficina Superconjunto_de: {Impresora_Laser, Impresora_Inyección} Fuente_alimentacion: Toma_Pared Autor: Juan_Perez Fecha: 15_Febrero_2008

Representación del Conocimiento La representación del conocimiento tiene una gran importancia a tal punto de actualmente se habla de la Ingeniería del Conocimiento. Los frames son una estructura en la cual se pueden representar valores, restricciones, procesos, tienen relaciones de pertinencia y herencia (por lo que se parecen a la programación orientada a objetos).

Representación del Conocimiento El método descripción y pareamiento se utiliza para solucionar problemas de IA y es de los más básicos. El primer paso consiste en identificar todas las características de un objeto. Después se realiza una búsqueda con un conjunto de objetos ya definidos.

Representación del Conocimiento En realidad se utilizan dos métodos muy importantes: el extractor y el evaluador de conocimientos. Al realizar el pareamiento de los objetos puede ser que no caigan exactamente en el patrón de conocimiento por lo que se tiene que tener una medida de similitud.

Representación del Conocimiento Una forma de explicitar conocimiento con gran difusión en la actualidad es a través del uso de ontologías, las cuales consiste de relaciones entre distintos conceptos como definiciones. Las ontologías pueden ser representadas a través de lenguajes como XML.

Representación del Conocimiento AMOR Querer a una persona o cosa sobre todas las cosas Palabra de 4 caracteres: ‘A’, ‘M’, ‘O’ y ‘R’ yuxtapuestos AMOR = AMOR AMOR = ROMA Amor = AMOR Amor = Cariño Amor = Amar Distancia Léxica 1

Representación del Conocimiento Círculo Descripción: Figura formada por todos los puntos comprendidos a una distancia equidistante del centro correspondidos en un ángulo de 0 a 360 grados. Propiedades Centro (punto) Diámetro (dos veces radio) Áreas

Representación del Conocimiento = = = Similitud de 75% =

Representación del Conocimiento Se utiliza en otras múltiples ramas como: Reconocimiento de huellas digitales Reconocimiento de Voz Reconocimiento de Lenguaje Natural Validación de Requerimientos de Software Etc. Se debe de representar de manera adecuada el conocimiento para poder compararlo.

Representación del Conocimiento Un granjero quiere cruzar un rió llevando consigo una zorra, una ganso y un saco de trigo. Por desgracia, su bote es tan pequeño que sólo puede transportar una de sus pertenencias en cada viaje. Peor aún, la zorra, si no se le vigila, se come al ganso, y el ganso, si no se le cuida, se come el trigo; de modo que el granjero no debe dejar a la zorra sola con el ganso o al ganso solo con el trigo.

Representación del Conocimiento Granjero Zorra Ganso Trigo Granjero Zorra Ganso Trigo ¿Se puede utilizar el método de descripción y pareamiento?

Representación del Conocimiento Granjero Zorra Ganso Trigo

Representación del Conocimiento Otra forma de resolución de problemas utilizado en la IA consiste en las Analogías. Las analogías son un tipo especial de relación que define como están representados los objetos de una categoría y como obtener sus predecesores y antecesores inmediatos.

Representación del Conocimiento Alguna vez nos hemos preguntado ¿por qué en la mayoría de los exámenes de admisión generalmente son más importantes las analogías que los de conocimientos? Por que en la mayoría de los casos el conocimiento de cierta forma se puede adquirir pero la forma de aprender y razonar es sumamente complicado. En muchos casos son más importantes las reglas que el conocimiento.

Representación del Conocimiento B C 1 2 3 4 ¿Cómo quedarían D y 5?

Representación del Conocimiento ¿Qué problemas se presentan con la Abstracción de la Figura D o bien de la Figura 3? La resolución de problemas por analogía tiene como base cierto conocimiento previo en ocasiones difícil de obtener. A B C 1 2

Sistemas Expertos Son el primer producto viable comercialmente de la Inteligencia Artificial. Permiten introducir información acerca de una materia específica a la computadora (base de conocimientos), y actúan como si fueran expertos en la materia.

Sistemas Expertos Un Sistema experto simula el proceso de razonamiento humano mediante la aplicación específica de conocimientos e inferencias. A continuación se mencionan algunas herramientas como Prolog y Lisp para la construcción de SE.

Quiz 2-1 ¿Quién es considerado el padre de la IA? ¿En qué consiste el test de Turing? ¿Quién invento el silogismo? Menciona tres áreas donde se puede utilizar la IA

Quiz 2-1 ¿Cuáles son las tres componentes que debe tener todo Sistema Inteligente? ¿Cuáles son los dos tipos de relaciones básicas en redes semánticas? ¿Qué es un script en IA?

Actividad Describe una heurística de cómo una persona puede escapar de un laberinto Describe un método de cómo se puede utilizar en un tablero de ajedrez de 4x4, 4 reinas sin que se eliminen. Generaliza dicho método para que se ejecuten n reinas en un tablero de nxn.

Actividad

Prolog Es un lenguaje de programación con paradigma de programación lógica. Viene del acrónimo de PROgamming LOGic. Basa su funcionamiento en lógica de primer orden. Utiliza el concepto de predicados lógicos para representar hechos y representar reglas de inferencia.

Prolog Prolog es un lenguaje interpretado. En este curso se utiliza la herramienta swiprolog dado que se puede ejecutar en Windows y es software libre. Los programas se pueden hacer directamente sobre la shell o bien, a través de un editor de Texto plano.

Prologo Todo sistema experto se compone de dos elementos principales: La base de conocimientos (hechos) El motor de inferencia (reglas) Generalmente las reglas son la interfaz que tiene la aplicación hacia el usuario para realizar preguntas.

PROLOG Hechos: las aves vuelan los pingüinos no vuelan "pichurri" es un ave "sandokan" es un perro "alegría" es un ave Los hechos pueden ser simples o complejos

PROLOG % Comentarios en Prolog % Base de Hechos volar(ave). %¿Sería regla? novolar(pingüinos). %omitir dicho predicado ave("pichurri”). perro(“wendo”). ave("alegría“).

PROLOG Reglas o Restricciones: una mascota vuela si es un ave y no es un pingüino Preguntas ¿ "pichurri" vuela ? ¿ qué mascotas vuelan ?

Prolog %Reglas vuela(X):- ave(X). Mascotavuela(X):- ave(X). Preguntas desde el shell vuela(“pichurri”) Mascotavuelan(X)

PROLOG Términos: constantes (a), variables (X), funciones (f(X, Y )) pepe, juan, Cliente, cliente-de(X, Y ) Fórmulas atómicas: predicados definidos sobre términos tipo-cliente(X,bueno)

PROLOG Fórmulas bien formadas (WFF: fórmulas atómicas unidas por conectivas (^, v, ¬) y cuantificadas (1A universal, 1B existencial) 1AX, 1BZ cliente(X) ^ compra(X, Z) ^ caro(Z)  tipo-cliente(X, bueno) abuelo(X,Y) :- padre(X,Z), padre(Z,Y). 1AX, Y 1BZ padre(X, Z) ^ padre(Z, Y)  abuelo(X, Y )

PROLOG abuelo(X,Y) :- padre(X,Z), madre(Z,Y). abuelo(X,Y) :- padre(X,Z), padre(Z,Y). abuelo(X, Y) = {(pepe, juan), (pepe, ana), … , (luis, javier)} progenitor(X, Y ) :- padre(X, Y ). progenitor(X, Y ) :- madre(X, Y ).

PROLOG abuelo(X,Y) :- padre(X,Z), madre(Z,Y). abuelo(X,Y) :- padre(X,Z), padre(Z,Y). abuelo(X,Y) :- padre(X,Z), progenitor(Z,Y). hechos: A. (A átomo) reglas: A :- A1, ..., An. (n>0, y A, A1, ..., An átomos)

PROLOG Hechos: padece(jon, gripe). padece(jon, hepatitis). padece(ana, gripe). padece(carlos, alergia). es-síntoma(fiebre, gripe). es-síntoma(cansancio, gripe). es-síntoma(estornudos, alergia). suprime(paracetamol, fiebre). suprime(antihistamínico, estornudos).

PROLOG Reglas: Preguntas: debe-tomar(Per, Far) :- padece(Per, Enf), alivia(Far, Enf). alivia(Far, Enf) :- es-síntoma(Sin, Enf), suprime(Far, Sin). Preguntas: ? padece(carlos, gripe). ? padece(jon, Z). ? alivia(paracetamol, gripe).

PROLOG ¿Qué devuelve cada pregunta como resultado? ? alivia(X, gripe). ? debe-tomar(Y, antihistamínico). ? alivia(X, Y). ? suprime(X, fiebre), suprime(X, estornudos). ¿Qué devuelve cada pregunta como resultado?

PROLOG hija (*A, *B) <- mujer (*A), padre (*B, *A). hija (*A, *B) <- mujer (*A), madre (*B, *A). A continuación se muestra un programa completo en PROLOG: %% declaraciones padrede('juan', 'maria'). padrede('pablo', 'juan').

PROLOG padrede('pablo', 'marcela'). padrede('carlos', 'debora'). %%Reglas % A es hijo de B si B es padre de A hijode(A,B) :- padrede(B,A). abuelode(A,B) :- padrede(A,C), padrede(C,B). hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B. familiarde(A,B) :- padrede(A,B).

PROLOG familiarde(A,B) :- hijode(A,B). familiarde(A,B) :- hermanode(A,B). %% consultas % juan es hermano de marcela? ?- hermanode('juan', 'marcela'). Yes ?- hermanode('carlos', 'juan'). No ?- abuelode('pablo', 'maria'). Yes ?- abuelode('maria', 'pablo'). no

PROLOG %unificación con evaluación. ?- X is 3+5. X = 8 %unificación simbólica ?- X = 3+5. X = 3+5

PROLOG %comparación con evaluación ?- 3+5 =:= 2+6. yes %comparación simbólica. ?- 3+5 == 2+6. no ?- 3+5 == 3+5.

PROLOG Los programas en PROLOG se definen a través de Algoritmos, Lógica y Control. En caso de que una consulta de más de un resultado, el prompt no aparece en la shell. Se puede utilizar el operador . Para terminar el resultado, o bien, el operador ; para continuar con los emparejamientos de resultados. Se pueden combinar preguntas para obtener respuestas más exactas.

PROLOG %Combinación de preguntas legusta(pepe, pesca). legusta(maria, bailar). legusta(ana, pesca). legusta(pepe, musica). legusta(maria, musica). legusta(ana, bailar). %preguntas

PROLOG ¿Le gusta la música a Pepé y a María? ?_ legusta(pepe,musica), legusta(maria, musica). ¿Le gusta bailar a Pepé o le gusta la música a maria? ?_ legusta(pepe,bailar); legusta(maria, musica).

Prolog ¿Le gusta bailar a Pepé y a maria no le gusta la música? legusta(pepe,bailar), not(legusta(maria,musica)).

PROLOG El portal de redes sociales del ITM desea diseñar un Sistema Experto para encontrar la pareja ideal de cada estudiante si es que existiese. Para lograr esto, se tienen en la base de conocimientos registrados los gustos de cada usuario (color de ojos, altura, complexión, carro, etc.). Se da un punto por cada coincidencia.

PROLOG Diseñar la regla o reglas que determinen la mejor pareja de cada usuario. (Se deben tener al menos 2 hombres y 2 mujeres con 5 gustos c/u). Probar su desarrollo a través de las reglas predefinidas.

PROLOG Se puede aplicar recursividad en PROLOG además de que algunos programas en programación estructurada pueden ser implementados. %Sucesiones sucesor(1,2). sucesor(2,3). sucesor(3,4). sucesor(4,5). sucesor(5,6).

PROLOG sucesor(6,7). suma(1,X,R):-sucesor(X,R). suma(N,X,R):-sucesor(M,N), suma(M,X, R1), sucesor(R1, R). %Como se crearía una consulta? %¿Qué es lo que el programa haría?

PROLOG % Ejemplo entrada(paella). entrada(gazpacho). entrada(consome). carne(filete_de_cerdo). carne(pollo_asado). pescado(trucha). pescado(bacalao). postre(flan).

PROLOG postre(nueces_con_miel). postre(naranja). calorias(paella, 200). calorias(gazpacho, 150). calorias(consome, 300). calorias(filete_de_cerdo, 400). calorias(pollo_asado, 280). calorias(trucha, 160). calorias(bacalao, 300).

PROLOG calorias(flan, 200). calorias(nueces_con_miel, 500). calorias(naranja, 50). plato_principal(P):- carne(P); pescado(P). comida(Entrada, Principal, Postre):- entrada(Entrada), plato_principal(Principal), postre(Postre). valor(Entrada, Principal, Postre, Valor):- calorias(Entrada, X), calorias(Principal, Y), calorias(Postre, Z), sumar(X, Y, Z, Valor).

PROLOG comida_equilibrada(Entrada, Principal, Postre):- comida(Entrada, Principal, Postre), valor(Entrada, Principal, Postre, Valor), menor(Valor, 800). sumar(X, Y, Z, Res):- Res is X + Y + Z. menor(X, Y):- X < Y. dif(X, Y):- X \==Y.

Prolog Encontrar: ¿Cuántas calorías tiene la combinación paella, trucha, naranja? ¿Qué comida que tiene cónsome de entrada es la más balanceada?

PROLOG Se pueden definir funciones recursivas como el factorial: fac(N,F) :- N > 0, M is N - 1, fac(M,Fm), F is N * Fm. ¿Cómo se expresa la serie de fibonnaci?

Tarea Práctica Robots Lego Traer en conjunto 6 pilas tamaño AA Instalar el kit de desarrollo (pasar el jueves o viernes por el disco).

¿Qué es la Robótica? Es el área de la Inteligencia Artificial (IA) que se encarga de los estudios de los robots. La robótica no sólo incluye elementos de IA sino también de mecatrónica, computación y otras áreas de la Ingeniería.

¿Qué es un Robot? Deriva de la palabra checa “robota”. Literalmente significa “esclavitud”, “servidumbre forzada” Máquina mecánica o autómata capaz de interactuar con el entorno y tomar decisiones propias

Características de un Robot Diseñados para sustituir al humano en algunas tareas.

Características de un Robot Capaces de actuar en función de la información recibida del mundo real.

Características de un Robot Los robots se clasifican según su forma en: Androides: Imitan la forma humana Móviles: Se desplazan mediante ruedas Zoomórficos: Con forma de animales Poliarticulados: Con partes móviles y poco grado de libertad.

Características de un robot Un robot se debe componer de: Mecanismo para desplazarse Mecanismo para percibir el mundo exterior Mecanismo para interactuar con el entorno

Funcionamiento de un Robot Mecanismo habitual de 3 ruedas: 2 ruedas motorizadas, con motores independientes. 1 rueda “muerta” para soportar el equilibrio.

Funcionamiento de un Robot Para hacer girar el robot, se modificará la velocidad y el sentido del giro de cada uno de los motores por separado. Se puede captar el entorno a través de los sensores del robot: Choque: Detecta colisiones físicas del robot.

Funcionamiento de un robot Sonar: Calcula la distancia del robot a otros objetos del entorno. Infrarrojos: Detección de colores, etc. Cámaras: Obtiene los datos mediante visión.

Funcionamiento de un Robot Inicializar el robot: Situarlo en el mundo. Recibir información por los sensores. Procesar la información recibida. Desplazar/Activar partes del robot.

Problemas Principales de un Robot Localización ¿Dónde estoy? Respuesta de los sensores: ¿Hay cuchara? Respuesta del sistema: ¿Todo ok?

Robot Lego RCX Ejemplos de Robots

Ejemplos de Robots Sony AIBO

Robot Lego Mindstorms NXT Es un Robot construido por la marca de juegos Lego. Se caracteriza por que este robot se puede armar en diversos modelos, además de que es económico ($250 USD), potente y muy versátil. No es un simple juguete.

Robot Lego Mindstorms NXY Ejemplos de Robots

NXT La unidad central de proceso contiene: 4 entradas (digital y analógica) 3 salidas (soporte para los motores) Pantalla LCD Monocromática de 100x64 píxeles

NXT 4 Botones de control Sonido Interfaces USB y Bluetooth

Sensores Tacto Luz Servomotor Ultrasónico Sonido

Procesador Atmel 32-bit ARM, AT91SAM7S256 256 KB FLASH 64 KB RAM 48 MHz

Coprocesador Atmel 8-bit AVR processor, ATmega48 4 KB FLASH 512 Byte RAM 8 MHz

Comunicación Bluetooth y USB BlueCoreTM 4 v2.0 +EDR System Soporta el Serial Port Profile (SPP) para emulación de puertos de comunicación. USB 2.0 Full speed com port (12 Mbit/s).

Motores Contador de rotaciones. Rotación de 360 grados. Las posiciones son relativas. La velocidad máxima es de 200 RPM.

Otras características Utiliza 6 pilas AA. Utiliza cables RJ-12 parecidos a los telefónicos (aplanados). Algunos fabricantes realizan otros tipos de piezas y sensores.

Herramientas de Programación LabVIEW NEXT-G Microsoft Robotics Studio Otras: NXC (and NBC) Robot C pbLua Java

Programación Basado en un ambiente gráfico de desarrollado (programación en bloques) desarrollado por National Instruments’ los desarrolladores de LabView. Permite el desarrollo rápido de aplicaciones. Útil para niños.

Programación Está muy limitado para realizar programas más complejos, por lo que se utilizan otros entornos. A continuación se listan los pasos para programar una aplicación en este Robot:

Programación Se arma el modelo de robot (se pueden seguir los pasos indicados en la guía o se desarrolla por cuenta propia). Se realiza la programación en bloques. Se baja el programa al Robot

Programación Se corre el programa en el Robot y se ven los resultados obtenidos. No se cuenta con un emulador para probar los desarrollos lo que dificulta un poco el proceso de desarrollo.

Entorno de Desarrollo Construcción Programación Ejecución

Guía Zona de Programación Bloques Propiedades Entorno de Desarrollo

Otros entornos NXC (Not eXactly C) es un lenguaje similar NQC, el cual es la forma más popular de programar el RCX. Está basado en el “ensamblador” NBC (Next Byte Code). RobotC es un entorno no gratuito desarrollado por CMU.

Programación con NXC Se tienen algunas limitaciones como: No existe pila Memoria Limitada Limitado a 256 procesos (task)

Programación con NXC #include "NXCDefs.h“ task main() { SetSensor( IN_1, SENSOR_TOUCH ); while( true ) { if( Sensor( IN_1 ) ) { PlayToneEx(440, 100, 3, false); TextOut( 0, LCD_LINE1, "TOUCHING!"); while( Sensor( IN_1 ) ); }

Programación con NXC TextOut( 0, LCD_LINE1, "---------"); while( !Sensor( IN_1 ) ); }

Construcción de Pistas de Robots

Detalles de la Pista

Competencia de autos

Evaluación de Obstáculos

Actividad Construir un robot que permita correr en un circuito. Ganará el robot que haga el recorrido en el menor tiempo posible. Construir un robot que pueda salir de un laberinto o de un cuarto con obstáculos. Construir un robot que permita cargar un objeto como una pelota de un contenedor y dejar la misma pelota en otra ubicación.

LISP Creado por John McCartney en 1958. Viene del acrónimo LISt Processing. Su paradigma de programación es la programación funcional por que todo se basa en el concepto de función. Su utilización en Inteligencia Artificial fue su gran éxito.

Introducción Los Componentes Básicos de LISP son: átomos y listas. Los átomos pueden ser cualquier combinación de letras como CASA, ITM, PIEDRA, etc. Las listas son cualquier combinación de átomos encerrados entre paréntesis. Se pueden tener listas anidadas.

Introducción Ejemplos de listas: (Esta es una lista) (EstaEsOtraLista) (Lista (anidada)) El vocablo “término” se utilizará para identificar un elemento de una lista ya sea átomo o sublista.

Programación Funcional Está caracterizada por el principio funcional. El valor de una expresión depende sólo de los valores de sus subexpresiones, si las tiene. A+B es simplemente la suma de A y B. Se excluye las asignaciones

Programación Funcional La mayoría de los lenguajes que lo implementan son impuros. Permiten asignaciones. Estilo de programación funcional. Los usuarios no deben preocuparse por el manejo de memoria. Ciertas operaciones asignan espacios de almacenamiento en el momento necesario.

Programación Funcional El almacenamiento que se vuelve inaccesible se libera. Recolección de basura. Las funciones son valores de primera clase. Tienen la misma jerarquía que cualquier otro valor.

Programación Funcional Puede ser el valor de una expresión. Puede pasarse como argumento. Puede colocarse en una estructura de datos.

Programación Funcional Lenguajes de Paradigma Funcional. LISP SCHEME COMMON LISP ML Haskell

Programación Funcional Una función matemática es un mapeo de miembros de un conjunto llamado dominio, hacia otro conjunto llamado contra-dominio. Toda definición de una función debe incluir de manera explicita o implícita: Dominio (Puede ser el resultado de un producto cruz) Contra-dominio Mapeo

Programación Funcional Una función regresa solo un valor del contra-dominio para cada valor del dominio. Es función?

Programación Funcional El orden de evaluación de sus expresiones de mapeo, es controlada por expresiones recursivas y condicionales.

Programación Funcional Siempre definen los mismos valores, para un mismo conjunto de valores. Una función define un valor. No una serie de operaciones sobre valores de una memoria, para producir dicho valor. Esto implica que no hay variables en el sentido estricto de los lenguajes imperativos.

Programación Funcional Variables que representan una localidad de memoria. Definición de funciones Nombre. Lista de parámetros entre paréntesis. Expresión de mapeo. cubo(x)=x*x*x Donde x es un número real.

Programación Funcional Los lenguajes funcionales, no tienen una construcción explícita para ciclos tal como FOR, WHILE, etc., Utilizan una técnica de programación conocida como recursividad. Aplicar una función como parte de la definición de esa misma función.

Programación Funcional Debe existir una condición terminal, con el objeto de que la función se bifurque hacia una resolución no recursiva en algún punto. De lo contrario, la función entra en un bucle infinito y nunca finaliza. Los lenguajes suelen ser tradicionalmente interpretados. Existen solo algunas opciones para compilar programas.

Programación Funcional ¿Por qué no todo mundo usa LISP? Sintaxis única. LISP  Lots of Silly Parenthesis (Montón de paréntesis tontos) Los paréntesis permiten uniformar la sintaxis.

Programación Funcional Facilita la manipulación de los programas como datos. No existen los tipos de datos. Parte de los errores semánticos permanecen ocultos hasta la ejecución. Implantaciones iniciales ineficientes.

Estructuras Átomos. Listas. Símbolos de Lisp Hacen la función de un identificador. Las constantes numéricas también son átomos. Listas. Estructura de datos. Su procesamiento rara vez requiere inserciones o eliminaciones.

Programación Funcional Listas. Se especifican delimitando sus elementos entre paréntesis. Listas simples. Todos sus elementos son átomos. (A B C D) Listas anidadas. Sus elementos pueden ser átomos o sublistas. (A (B C) D (E (F G)))

Programación Funcional Listas. Internamente se implementan como listas simples enlazadas. Cada nodo contiene dos punteros y representa un elemento. Un nodo para un átomo contiene su primer puntero apuntando hacia alguna representación del átomo.

Programación Funcional Un nodo para una sublista contiene su primer puntero apuntando hacia el primer nodo de la sublista. En cualquier caso, el segundo puntero de un nodo, apunta hacia el nodo siguiente. A continuación se describen las listas y sus elementos de forma gráfica.

Programación Funcional (A B C D) (A (B C) D (E (F G))) A B C D A C D B E F G

Programación Funcional ¿Cómo se usa LISP en IA? Se pueden codificar listas que pueden representarnos hechos, se pueden codificar reglas de inferencias en base a lista por lo que se puede hacer Programación Lógica. El motor de inferencia es implementado por el usuario pudiendo considerar más tipos de lógicas.

Programación Funcional El compilador/intérprete de LISP que se utilizará en este curso es el newLisp. newLISP es un proyecto de software libre que cuya característica principal es que puede correr en ambientes gráficos y a su vez generar representaciones visuales.

Operaciones Básicas A continuación se describen las operaciones básicas sobre LISP. La Evaluación de expresiones se realiza a través del Top Level que es muy semejante al shell visto en Prolog. Se escriben expresiones Lisp en el Top-Level, y el sistema despliega sus valores.

Operaciones Básicas El prompt > indica que Lisp está esperando a que una expresión sea escrita. La expresión es evaluada al pulsar enter. > 1 1 >

Operaciones Matemáticas Las operaciones matemáticas son básicas para poder implementar el paradigma funcional, a continuación se describen la forma de realizar operaciones matemáticas. Se desea evaluar la siguiente expresión aritmética: (+ 2 3) > (+ 2 3) 5 >

Operaciones Matemáticas + es el operador / función. Los números 2 y 3 son sus argumentos. Notación prefija. Sumar tres parámetros en notación infija implica Utilizar dos veces el operador suma: 2+3+5

Operaciones Matemáticas Sumar tres parámetros en notación prefija Una sola llamada a la función, con tres parámetros: (+ 2 3 5) + es una función (+ 2 3) es una llamada a la función. > (+ 2 3 5) 10 >

Operaciones Matemáticas Cuando LISP evalúa una llamada a alguna función, lo hace en dos pasos: Los argumentos de la llamada son evaluados de izquierda a derecha. En este caso los valores de los parámetros serán, 2 y 3 respectivamente. Los valores de los argumentos son pasados a la función nombrada por el operador. En este caso la función + que regresa 5.

Operaciones Matemáticas Uso del operador suma > (+) > (+ 2) 2 > (+ 2 3) 5 > (+ 2 3 5) 10 >

Operaciones Matemáticas Como los operadores pueden tomar un número variable de argumentos, es necesario utilizar los paréntesis para indicar donde inicia y donde termina una expresión. Las expresiones pueden anidarse. Por ejemplo: (7-1)/(4-2) > (/ (- 7 1)(- 4 2)) 3

Operaciones Matemáticas Si alguno de los argumentos es una llamada de función, ésta será evaluada acorde a las reglas. Los argumentos de la llamada son evaluados de izquierda a derecha. Los valores de los argumentos son pasados a la función nombrada por el operador. Evaluar (/ (- 7 1) (- 4 2))

Operaciones Matemáticas Lisp evalúa el primer argumento de izquierda a derecha (-7 1). 7 es evaluado como 7 y 1 como 1. Estos valores son pasados a la función - que regresa 6. El siguiente argumento (- 4 2) es evaluado.

Operaciones Matemáticas 4 es evaluado como 4 y 2 como 2. Estos valores son pasados a la función - que regresa 2. Los valores 6 y 2 son pasados a la función / que regresa 3.

Operaciones Matemáticas Un operador que no sigue la regla de evaluación es: quote ( ’ ) La regla de evaluación de quote es: No hacer nada, solo desplegar lo que el usuario tecleó. El operador quote es una forma de evitar que una expresión sea evaluada.

Operaciones Matemáticas > (quote (+ 2 3)) (+ 2 3) > ’(+ 2 3) Tipos de átomos Entero: Se escribe como una secuencia de dígitos. Ejemplo: 256. Cadena : Secuencia de caracteres que se delimita por comillas. Ejemplo: “Carpe Diem”.

Operaciones Matemáticas Enteros y cadenas se evalúan a ellos mismos. Los símbolos son palabras. Normalmente se evalúan como si estuvieran escritos en mayúsculas, independientemente de como fueron tecleados. Los símbolos por lo general no evalúan a si mismos. Es necesario referirse a ellos. > ’Amarone AMARONE

Operaciones Matemáticas Las listas se representan como cero o más elementos entre paréntesis. Los elementos pueden ser de cualquier tipo, incluidas las listas. Se debe usar quote con las listas, pues de otra forma Lisp las tomaría como una llamada a función.

Operaciones Matemáticas Un sólo quote protege a toda la expresión, incluidas las expresiones en ella. Se puede construir listas usando el operador list que es una función, y por lo tanto, sus argumentos son evaluados. > ’(Mis 2 "ciudades") (MIS 2 "CIUDADES") > ’(La lista (a b c) tiene 3 elementos) (LA LISTA (A B C) TIENE 3 ELEMENTOS)

Operaciones Matemáticas Estética minimalista y pragmática Los programas Lisp se representan como listas. Un programa Lisp puede generar código Lisp. Por eso es necesario quote. > (list ’mis (+ 4 2) "colegas") (MIS 6 COLEGAS)

Operaciones Matemáticas Si una lista es precedida por el operador quote, la evaluación regresa la misma lista. En otro caso, la lista es evaluada como si fuese código. > (list ’(+ 2 3) (+ 2 3)) ((+ 2 3) 5)

Operaciones Matemáticas En Lisp hay dos formas de representar la lista vacía Con un par de paréntesis Con el símbolo NIL. > () NIL > NIL

Operaciones Matemáticas La función cons construye listas. Si su segundo argumento es una lista, regresa una nueva lista con el primer argumento agregado en el frente. > (cons ’a ’(b c d)) (A B C D) > (cons ’a (cons ’b nil)) (A B)

Operaciones Matemáticas El segundo ejemplo es equivalente a: Las funciones primitivas para accesar los elementos de una lista son car y cdr. El car de una lista es su primer elemento (el más a la izquierda) . > (list ’a ’b) (A B)

Operaciones Matemáticas El cdr es el resto de la lista (menos el primer elemento). En realidad en newLisp car se hace a través de first y cdr a través de rest. > (first '(a b c)) a > (rest '(a b c)) (b c)

Estructuras de Control Ya se mencionó que no existen en LISP estructuras de control semejantes a los lenguajes procedimentales u orientado a objetos. Un Predicado es una función cuyo valor de regreso se interpreta como un valor de verdad (verdadero o falso). Es común que el símbolo de un predicado termine en p.

Estructuras de Control Como nil juega dos roles en Lisp, las funciones: null (lista vacía) y not (negación) hacen exactamente lo mismo: La condicional (if) Normalmente toma tres argumentos: una expresión a probar (test) > (null nil) T > (not nil)

Estructuras de Control una expresión entonces (then) que se evalua si test es T. una expresión si no (else) que se evalua si test es NIL. > (if (list? ’(a b c d)) (+ 1 2) (+ 3 4)) 3 > (if (list? 34) 7

Estructuras de Control La condicional (if) es una macro no una función. Los argumentos de una función siempre se evalúan. If solo evalúa dos test y (then o else) Si bien el default para representar verdadero es T, todo excepto nil cuenta como verdadero en un contexto lógico: > (if 27 1 2) 1 > (if nil 1 2) 2

Estructuras de Control Los operadores lógicos (and, or) toman cualquier número de argumentos, pero solo evalúan los necesarios para decidir que valor regresar. Si todos los argumentos son verdaderos (diferentes de nil), entonces and regresa el valor del último argumento. > (and t (+ 1 2)) 3

Estructuras de Control Si uno de los argumentos de and es falso, ninguno de los operadores siguientes es evaluado, y regresa nil. De manera similar, or se detiene en cuanto encuentra un elemento verdadero. Los operadores lógicos tampoco se consideran funciones, sino macros. > (or nil nil (+ 1 2) nil) 3

Funciones de Predicados Es posible definir nuevas funciones con defun que toma normalmente tres argumentos: Un nombre. Una lista de parámetros Una o más expresiones que conforman el cuerpo de la función.

Funciones El primer argumento de define indica que el nombre de la función definida será area. Los demás argumentos allí se muestran. > (define (area base altura) (* base altura)) (lambda (base altura) (* base altura)) > (area 2 3) 6

Funciones Cuando la variable representa el argumento de una función, se conoce como parámetro. Un símbolo usado de esta forma se conoce como variable. El resto de la definición indica lo que se debe hacer para calcular el valor de la función.

Funciones Símbolos y listas deben protegerse con quote para ser accedidos. Una lista debe protegerse porque de otra forma es procesada como si fuese código;. Un símbolo debe protegerse porque de otra forma es procesado como si fuese una variable.

Funciones La definición de una función corresponde a la versión generalizada de una expresión Lisp. La siguiente expresión verifica si la suma de 1 y 4 es mayor que 3: > (> (+ 1 4) 3) T

Funciones Substituyendo los números partículares por variables, podemos definir una función que verifica si la suma de sus dos primeros argumentos es mayor que el tercero: > (define (suma-mayor-que x y z) (> (+ x y) z)) (lambda (x y z) (> (+ x y) z)) > (suma-mayor-que 1 4 3) true

Funciones Lisp no distingue entre programa, procedimiento y función. Si se desea considerar una función en particular como main, es posible hacerlo, pero cualquier función puede ser llamada desde el top-level. Entre otras cosas, esto significa que posible probar un programa, pieza por pieza, conforme se va escribiendo.

Funciones Programación incremental (bottom-up). Las funciones que hemos definido hasta ahora, llaman a otras funciones para hacer una parte de sus cálculos. Por ejemplo: suma-mayor-que llama a las funciones + y >. Una función puede llamar a cualquier otra función, incluida ella misma.

Funciones Una función que se llama a si misma se conoce como recursiva. Recordar que las funciones recursivas tienen definidas un paso base para poder salir de la recursión y un paso recursivo. A continuación se muestra un ejemplo de la función de Fibonnaci, definir la función multiplicación de manera recursiva (utilizando sumas).

Funciones ; Función Fibonacci (define (fibonacci n) (if (< n 2) 1 89

Funciones Metáfora de la recursividad: procesos que se van resolviendo. Un estudiante está interesado en Lisp. Va a la biblioteca y el proceso que utilizaría para examinar un documento es el siguiente: Obtener una copia del documento que le interesa.

Funciones Buscar en él la información relativa a Lisp. Si el documento menciona otros documentos que puede ser útiles, examinarlos. También se deben tomar en cuenta algunos factores no funcionales.

Funciones Uno de los operadores más comunes en Lisp es let, que permite la creación de nuevas variables locales. Una expresión let tiene dos partes: Primero viene una lista de expresiones definiendo las nuevas variables locales, cada una de ellas con la forma (variable expresión). > (let ((x 1)(y 2)) (+ x y)) 3

Funciones Cada variable es inicializada con el valor que regrese la expresión asociada a ella. En el ejemplo anterior se han creado dos variables, x e y, con los valores 1 y 2 respectivamente. Esas variables son válidas dentro del cuerpo de let.

Funciones Una expresión let tiene dos partes: Después de la lista de variables y valores, viene el cuerpo de let constituido por una serie de expresiones que son evaluadas en orden. En el ejemplo, sólo hay una llamada a +..

Funciones En newLisp el operador de asignación más común es define. Se puede usar para asignar valores a cualquier tipo de variable. > (define glob 2000) 2000 > (let ((n 10)) (define n 2) n) 2

Funciones Cuando el primer argumento de setf es un símbolo que no es el nombre de una variable local, se asume que se trata de una variable global. > (define x ‘(a b c)) (A B C)

GUI en LISP (load (append (env "NEWLISPDIR") "/guiserver.lsp")) (gs:init) (gs:frame 'Mixer 200 200 400 300 "Mixer") (gs:set-resizable 'Mixer nil) (gs:set-border-layout 'Mixer) (gs:panel 'SliderPanel) (gs:set-grid-layout 'SliderPanel 3 1) (gs:panel 'RedPanel) (gs:panel 'GreenPanel)

GUI en LISP (gs:panel 'BluePanel) (gs:label 'Red "Red" "left" 50 10 ) (gs:label 'Green "Green" "left" 50 10 ) (gs:label 'Blue "Blue" "left" 50 10 ) (gs:slider 'RedSlider 'slider-handler "horizontal" 0 100 0) (gs:slider 'GreenSlider 'slider-handler "horizontal" 0 100 0) (gs:slider 'BlueSlider 'slider-handler "horizontal" 0 100 0)

GUI en LISP (gs:label 'RedSliderStatus "0" "right" 50 10) (gs:label 'GreenSliderStatus "0" "right" 50 10) (gs:label 'BlueSliderStatus "0" "right" 50 10) (gs:add-to 'RedPanel 'Red 'RedSlider 'RedSliderStatus) (gs:add-to 'GreenPanel 'Green 'GreenSlider 'GreenSliderStatus) (gs:add-to 'BluePanel 'Blue 'BlueSlider 'BlueSliderStatus) (gs:add-to 'SliderPanel 'RedPanel 'GreenPanel 'BluePanel)

GUI en LISP (gs:canvas 'Swatch) (gs:label 'Value "") (gs:set-font 'Value "Sans Serif" 16) (gs:add-to 'Mixer 'SliderPanel "north" 'Swatch "center" 'Value "south") (gs:set-visible 'Mixer true) (set 'red 0 'green 0 'blue 0) (gs:set-color 'Swatch (list red green blue)) (gs:set-text 'Value (string (list red green blue)))

GUI en LISP (define (slider-handler id value) (cond ((= id "MAIN:RedSlider") (set 'red (div value 100)) (gs:set-text 'RedSliderStatus (string red))) ((= id "MAIN:GreenSlider") (set 'green (div value 100)) (gs:set-text 'GreenSliderStatus (string green)))

GUI en LISP ((= id "MAIN:BlueSlider") (set 'blue (div value 100)) (gs:set-text 'BlueSliderStatus (string blue))) ) (gs:set-color 'Swatch (list red green blue)) (gs:set-text 'Value (string (list red green blue)))) (gs:listen)

GUI en LISP ;Uso de Bibliotecas de Windows (import "user32.dll" "MessageBoxA") (MessageBoxA 0 "Hola Mundo!" "Ejemplo de GUI" 0) Se pueden crear DLLs em lenguajes como C++ y poder utilizarlo em funciones más complejas.

Entradas y Salidas Para la definición de salidas se puede utilizar la función print. La función time devuelve el tiempo en que tarda una función en evaluarse. > (print (+ 2 3 4 1)) 1010 > (+ (* 2 3) (/ 3 2) 9) 16 > (+ (print (* 2 3)) (print (/ 3 2)) (print 9)) 6 1 9 16 > time (promedio 1 2)

Entradas y Salidas Se puede guardar programas con la extensión .lsp para después poderlos ejecutar. A continuación se muestra una tabla con las principales funciones definidas en la mayoría de los dialectos de LISP. > (load “f:/myfile.lisp") Ejecuta todo el script > (read-file “msgbox.lsp”) Visualiza todo el script

Funciones abs and Append apply assoc map car cdr Close cond mapc difference (-) defun (de,df) dm(macro) Eq equal eval explode function gensym get getd go greaterp(gt) intern lambda length list mapcan mapcar lessp (It) expt fix fixp float floatp mapcon maplist max min nconc not numberp null open or princ print prin1 prog progn put quote (') quotient (/) read remainder remob remprop return reverse rplaca rplacd set setq subst plus (+) Terpri times (*) cons atom  

Más de LISP ; imprimir los primeros 10 números de fibonacci (for (n 1 10) (println n " " (fibonacci n))) (max 1.1 43 23 12 -1 53 4 32); ¿Cuanto da? ; ¿Qué hacen? (directory "/") (exit)

Funciones Para poder operar aritméticamente con dobles se ocupan las funciones: add, sub, mul y div. La función list? Permite saber si un argumento es un lista o no. Null? Permite saber si una lista está vacía o no. La función symbol? Permite determinar si un argumento es un símbolo o no.

Funciones La función number? Permite saber si un argumento es numérico o no. Prototipo de función recursiva; (define (suma lista) (if (null? lista) 0 (+ (first lista) (suma (rest lista))) ))

Funciones ¿Cómo se mandaría llamar la función para sumar números del 1 al 5? Realizar una función llamada longitud para definir el número de argumentos que tiene una lista. (longitud ‘(1 2 4)). Devuelve 3 Realizar una función llamada miembro para encontrar la sublista a partir de la cual se encuentra dicho elemento. (miembro 3 (‘1 2 3 4 5)) imprime como salida (3 4 5).

Más de LISP (set 'alphabet "abcdefghijklmnopqrstuvwxyz") (upper-case alphabet); ¿? (set 'x (+ 2 2 )) ; ¿? (set 'y '(+ 2 2)) ; ¿? (dotimes (c 10) (println c " por 3 es " (* c 3)))

Más de LISP ;Ejemplo de un switch (if (< x 0) (set 'a "imposible") (< x 10) (set 'a "pequeño") (< x 20) (set 'a "medio") (>= x 20) (set 'a "largo") )

Más de LISP (set 'counter 1) (dolist (i (sequence -5 5)) (println "Elemento " counter ": " i) (inc 'counter)) (println "Element " $idx ": " i))

Más de LISP ;Switch (case n (1 (println "un")) (2 (println "deux")) (3 (println "trois")) (4 (println "quatre"))) (randomize (sequence 1 99)) (dup 1 6)

Más de LISP (set 'L '(a b c (d e (f g) h i) j k)) (define (walk-tree tree) (cond ((= tree '()) true) ((atom? (first tree)) (println (first tree)) (walk-tree (rest tree))) (true (walk-tree (first tree)) (walk-tree (rest tree)))))

LISP (define (walk-tree tree) (dolist (elmnt tree) (if (list? elmnt) (walk-tree elmnt) (println elmnt)))) >_ (walk-tree L)

Bibliografía Rico, F. (2007) Programación Funcional, Material de la Materia Lenguajes de Programación, UVAQ Noviembre 2007. Montes, M. y Villaseñor L. (2008) Fundamentos de Inteligencia Artificial Métodos básicos de solución de problemas, Instituto Nacional de Astrofísica, Óptica y Electrónica, Puebla, México. 203

Bibliografía Decker, R. y Hirshfield, S. (2001). Máquina Analítica. Introducción a las Ciencias de la Computación con Uso de Internet, Thomson, México. Capítulo 9 Inteligencia Artificial pp. 295-325. Hernández, V. (2007). Mapas Conceptuales La gestión del Conocimiento en la Didáctica. Segunda Edición, México: Alfaomega.

Bibliografía Montes, M. y Villaseñor L. (2008) Fundamentos de Inteligencia Artificial Métodos básicos de solución de problemas, Instituto Nacional de Astrofísica, Óptica y Electrónica, Puebla, México.

¿Preguntas, dudas y comentarios?