Aritmética y operadores (2011/2012)

Documentos relacionados
Tema 1: Revisión de Prolog

5.3 Tipos de Datos en Prolog

6. Operadores en PROLOG

Principios de Computadoras II

Tema 3.- Predicados y sentencias condicionales

4. Predicados predefinidos

Tema 4. Operadores y Expresiones

Introducción a Haskell. El lenguaje Haskell

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

7.4. UTILIDADES DE LAS PILAS

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Práctica de constantes, expresiones y operadores. Programación en C 1

Programación 1 - Práctica 0, recargada.

Ejercicios resueltos. Computación. Tema 3

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

1. Sintaxis de Prolog

Estructuras de Datos. La pila es un objeto dinámico en constante cambio.

Unidad II: Análisis semántico

TEMA 1: LÓGICA. p p Operador conjunción. Se lee y y se representa por. Su tabla de verdad es: p q p q

GUÍA BÁSICA DE SCHEME v.4

Tema 3. Tipos de datos simples

PHP: Lenguaje de programación

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

1. El vocabulario de un programa PROLOG

Álgebra Booleana. Suma Booleana. El término suma es 1 si al menos uno de sus literales son 1. El término suma es 0 solamente si cada literal es 0.

Expresiones y sentencias

Expresiones Aritméticas

3 Polinomios y funciones racionales

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Universidad Rafael Urdaneta Escuela de Ingeniería de Computación

Estructuras de Control. Secuencia y Selección

UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO. Tema 9.- Elementos básicos de Prolog

- Bases de Datos (2012/2013) Adjunto Tema 1: Ampliación DER (3)

L = {a n b n n>0}. L = {a n b n c n n>0}. L = {xcx x {a, b} + }.

Lección 2 Introducción al lenguaje C

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Estatutos de Control C# Estatutos de Decisión (Selección)

Tema 3: Tipos y clases

Métodos de Inteligencia Artificial

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Tipos Abstractos de Datos

Módulo 2: Algoritmos (continuación)

4 Conjunto de los números reales

Matemáticas Discretas FUNCIONES

06 Análisis léxico II

No es otra cosa, que la representación de los resultados de una función sobre el plano carteciano.

ANÁLISIS I MATEMÁTICA 1 ANÁLISIS II (Computación) Práctica 5 - Verano 2009

Representación de números en la recta real. Intervalos

5. Entrada y Salida en PROLOG

El lenguaje C. 1. Identificadores, constantes y variables

Álgebra y Trigonometría

Profesor(a): Ing. Miriam Cerón Brito

MatemáticaDiscreta&Lógica 1

CONTINUIDAD DE FUNCIONES. SECCIONES A. Definición de función continua. B. Propiedades de las funciones continuas. C. Ejercicios propuestos.

Tema 3: Tipos y clases

Expresiones y sentencias

f: D IR IR x f(x) v. indep. v. dependiente, imagen de x mediante f, y = f(x). A x se le llama antiimagen de y por f, y se denota por x = f -1 (y).

Lógica Proposicional IIC1253. IIC1253 Lógica Proposicional 1/64

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Derivadas e integrales

Enteros: números pertenecientes a un subconjunto finito de los números enteros. Lógicos: los dos valores lógicos, VERDADERO (true) o FALSO (false).

PLANES CURRICULARES GRADO9º/ 01 PERIODO

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Introducción a la Matemática Discreta

Unidad didáctica 1. Operaciones básicas con números enteros

Secuencias en Python. Introducción a la Computación Clase 11 Patricia Borensztejn

Introducción a la Matemática Discreta

Problemas de Selectividad de Matemáticas II Comunidad de Madrid (Resueltos) Isaac Musat Hervás

Predicados Básicos de Prolog TAII(I) - Curso

Capítulo 2 Conjuntos. 2.1 Introducción. 2.2 Determinación de conjuntos. Definición:

Derivada de la función compuesta. Regla de la cadena

Isabelle como un lenguaje funcional

Si el producto de dos números es cero

REFERENCIA DEL LENGUAJE

Introducción. El uso de los símbolos en matemáticas.

el proceso de backtracking.

PROLOG Inteligencia Artificial Universidad de Talca, II Semestre Jorge Pérez R.

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

REPASO DE FUNCIONES FUNCIONES REALES DE VARIABLE REAL

Álgebra Booleana. Álgebra Booleana. Definiciones. Definiciones. Definiciones. Definiciones. Sistemas Digitales Mario Medina 1

Matemáticas Básicas para Computación

FUNDAMENTOS DE INFORMÁTICA

Matemáticas Discretas Lógica

Recursión. Capítulo 4

Carlos A. Rivera-Morales. Precálculo 2

Derive V Límites y derivadas

Tema 13: Aplicaciones de programación funcional

Ejercicios de Lógica Proposicional *

Operadores y Expresiones

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

Datos y tipos de datos

Operaciones con monomios y polinomios

TALLER DE EXCEL BÁSICO

Manipulando celdas. Te recomendamos iniciar Excel 2007 ahora para ir probando todo lo que te explicamos.

Computación I Representación Interna Curso 2011

Estructuras Algebraicas

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

Opuesto de un número +3 + (-3) = (+5) = 0. N = 0,1, 2,3,4, Conjunto de los números naturales

Transcripción:

Luis Valencia Cabrera (coordinador) lvalencia@us.es (http://www.cs.us.es/~lvalencia) Manuel García-Quismondo mgarciaquismondo@us.es (http://www.cs.us.es/~mgarcia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Universidad de Sevilla Aritmética y operadores (2011/2012)

Índice Aritmética en Prolog Operadores predefinidos Unificación y Evaluación Predicados aritméticos Ejemplos de uso de operadores predefinidos Operadores definidos por el usuario Ejemplos de definición de operadores por el usuario

Aritmética en Prolog. Operadores prefijos e infijos Operadores prefijos e infijos: (a + b) * (5 / c)?- display((a + b) * (5 / c)). *(+(a, b), /(5, c)) Yes a + b * 5 / c?- display(a + b * 5 / c). +(a, /(*(b, 5), c)) Yes

Aritmética en Prolog. Precedencia y asociatividad Precedencia y tipo de operadores predefinidos: Precedencia Tipo Operadores 500 yfx +, - 500 fx - 400 yfx *, / 200 xfy ^ Menor precedencia implica aplicar antes (como si llevara paréntesis). Mayor precedencia, más arriba en árbol (see next). fx, fy: Prefijo xfx: Infijo no asociativo yfx: Infijo asocia por la izquierda xfy: Infijo asocia por la derecha xf, yf: Postfijo

Aritmética en Prolog. Precedencia de operadores(i) Precedencia entre argumentos x e y La precedencia de un término simple es cero La precedencia de un término compuesto es la del símbolo de función principal y cero si no está predefinido x representa un argumento cuya precedencia es estrictamente menor que la del operador y representa un argumento cuya precedencia es menor o igual que la del operador

Aritmética en Prolog. Precedencia de operadores (II) Análisis de expresiones con operadores?- display(2+3+4). +(+(2, 3), 4) Yes?- display(2+3*4). +(2, *(3, 4)) Yes?- display((2+3)*4). *(+(2, 3), 4) Yes?- display(2^3^4). ^(2, ^(3, 4)) Yes

Operadores definidos Se puede saber si un operador está definido y cómo? current_op(?precedencia,?tipo,?nombre) Es verdadero si el operador Nombre está definido como operador de tipo Tipo con precedencia Precedencia Ejemplo:?- current_op(precedencia, Tipo, \+). Precedencia = 900 Tipo = fy True Ver todos los operadores definidos:?- current_op(precedencia, Tipo, Operador).

Aritmética y Unificación?- X=1+2. X = 1+2.?- 1+2. Warning: toplevel: Undefined procedure: (+)/2 (DWIM could not correct goal) false.?- 1 + 2 = 2 + 1. false.?- X + 1 = 1 + 2. false.?- X + 1 =:= 1 + 2. ERROR: =:=/2: Arguments are not sufficiently instantiated 12?- X + 1 is 1 + 2. false.?- 1 + A = B + 2. A = 2, B = 1.

Evaluación aritmética Evaluador: is Ejemplos:?- X is 2+3^3. X = 29 Yes?- 29 is X+3^3. [WARNING: Arguments are not sufficiently instantiated]?- X = 1 + 2, display(x), Y is X. +(1, 2) % Functor: +. Argumentos: 1, 2. Visualización (display) X = 1+2 % Término: 1+2. Unificación (=) Y = 3 % Evaluación (is) Yes (Unificación, visualización y evaluación)

Predicados aritméticos Precedencia Tipo Operadores 700 xfx <, =<, >, >=, =:=, =\=?- X = 2+3^3. X = 2+3^3?- 2+3^Y = 2+3^3. Y = 3?- 3 =< 5. Yes?- 3 > X. [WARNING: Arguments are not sufficiently instantiated]?- 2+5 = 10-3. No?- 2+5 =:= 10-3. Yes?- 2+5 =\= 10-3. No?- 2+5 =\= 10^3. Yes

Ejemplos. Máximo Máximo de dos números: maximo(x,y,z) se verifica si Z es el máximo de los números X e Y. Ejemplo: maximo(3,5,z) => Z=5 Programa: maximo.pl maximo(x,y,x) :- X >= Y. maximo(x,y,y) :- X < Y. Sesión?- maximo(2,3,x). X = 3 ; No?- maximo(3,2,x). X = 3 ; No

Ejemplos. Factorial Factorial de un número: factorial(x,y) se verifica si Y es el factorial de X Programa: factorial.pl factorial(1,1). factorial(x,y) :- X > 1, X1 is X - 1, factorial(x1,y1), Y is X * Y1. Sesión?- factorial(4,y). Y = 24 Yes Cálculo de factorial(4,y) X = 4 X1 is X-1 => X1 = 3 factorial(x1,y1) => Y1 = 6 Y is X*Y1 => Y = 24

Ejemplos. Fibonacci La sucesión de Fibonacci es: 0, 1, 1, 2, 3, 5, 8,... y está definida por f(0) = 0 f(1) = 1 f(n) = f(n-1)+f(n-2), si n >1 fibonacci(n,x) se verifica si X es el N ésimo término de la sucesión de Fibonacci. Programa: fibonacci.pl fibonacci(0,0). fibonacci(1,1). fibonacci(n,x) :- N > 1, N1 is N-1, fibonacci(n1,x1), N2 is N-2, fibonacci(n2,x2), X is X1+X2. Sesión?- fibonacci(6,x). X = 8

Ejemplos. Longitud de lista Longitud de una lista longitud(l,n) se verifica si N es la longitud de la lista L Ejemplos longitud([],n) => N = 0 longitud([a,b,c],n) => N = 3 longitud([a,[b,c]],n) => N = 2 Programa: longitud.pl longitud([],0). longitud([_x L],N) :- longitud(l,m), N is M + 1. Sesión?- longitud([a,b,c],n). N = 3 Yes Predicado predefinido: length(l,n)

Ejemplos. Máximo de lista Máximo de una lista max_list(l,n) se verifica si N es el máximo de los elementos de la lista de números L Sesión?- max_list([1,3,9,5],x). X = 9 Yes Programa: max list.pl max_list([x],x). max_list([x,y L],Z) :- max_list([y L],U), maximo(x,u,z). maximo(x,y,x) :- X >= Y. maximo(x,y,y) :- X < Y.

Ejemplos. Número entero en un intervalo entre otros dos Intervalo entero entre(n1,n2,x) que se verifica si X es mayor o igual que N1 y menor o igual que N2. Sesión?- entre(2,5,x). X = 2 ; X = 3 ; X = 4 ; X = 5 ; No?- entre(2,1,x). No Programa: entre.pl entre(n1,n2,n1) :- N1 =< N2. entre(n1,n2,x) :- N1 < N2, N3 is N1 + 1, entre(n3,n2,x). Predicado predefinido: between(n1,n2,x)

Operadores definidos por el usuario (I) Operadores definidos por el usuario pedro come pan ==>come(pedro,pan) juan tiene discos ==>tiene(juan,discos) Definición de operadores (directiva op) :- op(600,xfx,come). Precedencia: Entre 1 y 1200 Estructura de arbol Juan y Pedro comen pan

Operadores definidos por el usuario (II) Sin operadores: comen(y(juan,pedro),pan). Con operadores: :-op(800,xfx,comen). :-op(400,xfx,y). juan y pedro comen pan.?- display(juan y pedro comen pan). comen(y(juan, pedro), pan) Yes?- Quienes comen pan. Quienes = juan y pedro ; No?- Alguien y pedro comen pan. Alguien = juan ; No?- juan y pedro comen Algo. Algo = pan ; No

Ejemplos de definición de operadores. Libro de ciencias Ejemplo: El libro de ciencias de Juan es rojo Programa :-op(800,xfx,es). :-op(400,yfx,de). el_libro de ciencias de juan es rojo.

Ejemplos de definición de operadores. Libro de ciencias?- display(el_libro de ciencias de juan es rojo). es(de(de(el_libro, ciencias), juan), rojo)?- display(x es rojo). es(_g177, rojo) X = _G177?- X es rojo. X = el_libro de ciencias de juan?- display(x de Y es rojo). es(de(x, Y), rojo)?- X de Y es rojo. X = el_libro de ciencias Y = juan?- display(el_libro de X es rojo). es(de(el_libro, X), rojo)?- el_libro de X es rojo. No

Ejemplos de representación y operadores. Fuga de agua Descripción: Si la cocina está seca y el recibidor mojado entonces la fuga de agua está en el baño. Si el recibidor está mojado y el baño está seco entonces el problema está en la cocina. Si la ventana está cerrada o no llueve entonces no entra agua del exterior. Si el problema está en la cocina y no entra agua del exterior, la fuga de agua está en la cocina. Evidencias: El recibidor está mojado. El baño está seco. La ventana está cerrada.

Ejemplos de representación y operadores. Fuga de agua Representación directa en Prolog: Reglas: fuga_en_bagno :- recibidor_mojado, cocina_seca. problema_en_cocina :- recibidor_mojado, bagno_seco. no_agua_exterior :- ventana_cerrada; no_llueve. fuga_en_cocina :- problema_en_cocina, no_agua_exterior. Hechos: recibidor_mojado. bagno_seco. ventana_cerrada. Pregunta en Prolog:?- fuga_en_cocina. true

Ejemplos de representación y operadores. Fuga de agua Debilidades (desde el pto de vista del usuario): El usuario puede no estar familiarizado con la sintaxis de Prolog La base de conocimiento debe de distinguirse del programa Prolog que implemente el SBC Vamos a dar una alternativa para separar la sintaxis de Prolog pura de la base de conocimiento. Lo haremos a través de operadores.

Representación de Reglas y hechos % La representacion interna de una regla debe ser la que aparece a la derecha. % Cond puede ser una combinacion, usando o o y, % de afirmaciones (la disyuncion con prioridad mayor). f % Los hechos se deben representar internamente como:

Representación. Operadores Para poder escribir los hechos y reglas con esta sintaxis definimos una serie de operadores: :- op(875, xfx, hecho). :- op(875, xfx, #). :- op(825, fx, si). :- op(850, xfx, entonces). :- op(800, xfy, o). % Asociatividad a la derecha :- op(775, xfy, y). % Asociatividad a la derecha

Ejemplo fuga de agua. Base de conocimiento r1 # si cocina_seca y recibidor_mojado entonces fuga_en_bagno. r2 # si recibidor_mojado y bagno_seco entonces problema_en_cocina. r3 # si ventana_cerrada o no_llueve entonces no_agua_exterior. r4 # si problema_en_cocina y no_agua_exterior entonces fuga_en_cocina. f1 hecho recibidor_mojado. f2 hecho bagno_seco. f3 hecho ventana_cerrada.

Conclusión sobre esta representación Las reglas y hechos de la base de conocimiento continúan siendo hechos Prolog. Los Operadores Prolog consiguen acercar la expresión de las reglas al lenguaje natural. Esto facilita la legibilidad para el usuario no familiarizado con Prolog.