Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados...

27
Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Predicados Extra-lógicos 2 Contenido 1. Predicados extra-lógicos 2. Predicados aritméticos 3. Entrada/salida de términos 4. Unificación y no unificación 5. Comparación de términos 6. Declaración de operadores

Transcript of Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados...

Page 1: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos

Ingeniería Informática

Ingeniería Técnica en Informática de Sistemas

Departamento de Lenguajes y

Ciencias de la Computación

Universidad de Málaga

Predicados Extra-lógicos 2

Contenido

1. Predicados extra-lógicos

2. Predicados aritméticos

3. Entrada/salida de términos

4. Unificación y no unificación

5. Comparación de términos

6. Declaración de operadores

Page 2: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos

Predicados Extra-lógicos 4

Prolog = Programación lógica

Base teórica: Prolog puro se basa exclusivamente en la lógica de Horn

Ventajas: análisis y transformación de programas

Inconvenientes: acceso a recursos hardware/software

Programa(cláusulas de Horn)

Motor de Inferencia(SLD-Resolución)

consultas

respuestas computadas

Page 3: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 5

Prolog = Programación lógica + Extra-lógica

Aplicación práctica: extendemos extra-lógicamente el lenguaje para dar acceso a ciertos recursos (aritmética, entrada/salida…)

Programa(cláusulas de Horn)

Motor de Inferencia(SLD-Resolución)

+Evaluador Extra-lógico

consultas

respuestas computadas

Predicados Extra-lógicos 6

Predicados extra-lógicos (I)

Características comunes:

están predefinidos por el sistema Prolog (bibliotecas)

se resuelven al margen de la SLD-Resolución, aprovechando el hardware/software de la plataforma

tienen asociado un algoritmo de evaluación cuya ejecución termina en éxito o fracaso, o bien genera un error

suelen ser deterministas (respuesta única) y soportar sólo algunos usos

Ventajas: aplicación práctica, expresividad, eficiencia

Inconvenientes: dificulta análisis y transformación de programas

Page 4: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 7

Predicados extra-lógicos (y II)

Sólo estudiaremos algunos predicados extra-lógicos:

aritméticos

entrada/salida

comparación de términos

declaración de operadores

Anotaremos las cabeceras de los predicados extra-lógicos con los usos posibles (+ entrada, - salida, ? entrada o salida):

Ejemplo: is(?X,+Y)

read(-X)

write(+X)

Predicados Aritméticos

Page 5: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 9

Predicados aritméticos

Permiten evaluar expresiones aritméticas:

(1 + sqrt(5)) / 2 = 1.61803

Para incorporar expresiones aritméticas a Prolog es necesario:

extender la sintaxis para soportar operadores

(1 + sqrt(5)) / 2

añadir funciones aritméticas predefinidas (sqrt,sin, …)

añadir un predicado extra-lógico que solicite la evaluación de expresiones aritméticas (Prolog no evalúa términos)

Predicados Extra-lógicos 10

Operadores Prolog

Definición: un operador Prolog es un functor de aridad 1 o 2 que puede escribirse de forma prefija, postfija o infija, prescindiendo de los paréntesis

Ejemplo:

X + Y ���� +(X,Y) % +/2, infijo

- X ���� -(X) % -/1, prefijo

son un mecanismo exclusivamente sintáctico, no tienen asociada ninguna operación (semántica)

para evitar ambigüedades, se definen prioridades y asociatividad

pueden ser predefinidos o declarados por el usuario

Page 6: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 11

Operadores aritméticos

Prolog predefine los siguientes operadores aritméticos:

X + Y suma

X – Y resta

- X menos unario

X * Y producto

X / Y cociente

X // Y cociente división entera

X mod Y resto división entera

X ** Y potencia

al escribir 5 + 3 * 7 Prolog entiende +(5, *(3,7))

Prolog no evalúa los términos: +(5, *(3,7)) ≠≠≠≠ 26

Predicados Extra-lógicos 12

Funciones aritméticas básicas

Prolog predefine las siguientes funciones aritméticas básicas:

abs(X) valor absoluto

sign(X) signo (-1, 0, 1)

max(X,Y) máximo

min(X,Y) mínimo

random(X) entero aleatorio entre 0 y X-1

sqrt(X) raíz cuadrada

floor(X) techo

ceiling(X) suelo

round(X) redondeo

truncate(X) truncamiento

Page 7: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 13

Otras funciones aritméticas

trigonométricas:

sin(X), cos(X), tan(X)

asin(X,Y), acos(X), atan(X), atan(X,Y)

logarítmicas y exponenciales:

log(X), log10(X)

exp(X)

constantes:

pi, e

Predicados Extra-lógicos 14

Expresión aritmética

Definición: un término Prolog es un expresión aritmética si

1) sus functores son operadores o funciones aritméticas

2) sus constantes son funciones aritméticas o números

3) sus variables están instanciadas a expresiones aritméticas

2.0 * (pi + sin(X)) X libre, no es expresión aritmética

cos(a)**2 no es una expresión aritmética

5 + Y {Y/b}, no es una expresión aritmética

2.0 * (pi + sin(X)) {X/2*5} una expresión aritmética

una expresión aritmética no contiene variables libres

una expresión aritmética es un término � no se evalúa por defecto

Page 8: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 15

El predicado aritmético is/2

se utiliza para evaluar expresiones aritméticas

is(?X,+Y)

X debe ser una variable libre o un número

Y debe ser una expresión aritmética

algoritmo is(X,Y)

1. v = evaluar(Y) (si hay error, se eleva una excepción)

2. unificar X con v, acabando en éxito o fracaso

el predicado is/2 puede instanciar la variable X

el functor is/2 es un operador: is(X,Y) = X is Y

Predicados Extra-lógicos 16

Usos del predicado is/2

?- 9 is 2*4+1.

Yes

?- X is 2*4+1.

X = 9 ;

No

?- Y = 2*4, X is Y+1.

X = 9 ;

No

?- Phi is (1+sqrt(5))/2.

Phi = 1.61803 ;

No

?- X is 2/(1-1).

ERROR: Arithmetic: evaluation error: `zero_divisor‘

Page 9: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 17

Errores comunes al usar is/2

?- X is Y+1.

ERROR: Arguments are not sufficiently instantiated

?- X is y+1.

ERROR: Arithmetic: `y/0' is not a function

?- 8+1 is 2*4+1.

No

?- X = 0, X is X+1.

No

Predicados Extra-lógicos 18

Operadores relacionales aritméticos

Se emplean para comparar expresiones aritméticas:

+X =:= +Y +X < +Y +X =< +Y

+X =\= +Y +X > +Y +X >= +Y

X e Y deben ser expresiones aritméticas

algoritmo X comp Y1. vx= evaluar(X), vy= evaluar(Y) (si hay error, elevar excepción)

2. res= vx comp vy3. si res es cierto acabar con éxito, sino acabar con fracaso

donde comp ∈ {=:=, =\=, <, >, =<, >=}

Page 10: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 19

Uso de la comparación aritmética

Sólo se puede usar como test (+,+), pues no hay variables libres:

?- 2.0 =:= 1.0 + 1.0.

Yes

?- 2 =:= 1.0 + 1.0.

Yes

?- 3 < 6 < 9.

ERROR: Syntax error: Operator priority clash

?- X is (3 < 9).

ERROR: Arithmetic: `(<)/2' is not a function

Predicados Extra-lógicos 20

Programando con predicados extra-lógicos

Las técnicas de programación básicas siguen disponibles:

recursión

recursión de cola

generar/comprobar

pero su aplicación esconde algunos matices

Definiremos versiones extra-lógicas de los predicados sobre naturales

Page 11: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 21

Predicados extra-lógicos y usos posibles

% menor(+X,+Y)

menor(X,Y) :- X < Y.

% minimo(+X,+Y,?Z)

minimo(X,Y,X) :- X =< Y.

minimo(X,Y,Y) :- Y < X.

% suma(+X,+Y,?Z)

suma(X,Y,Z) :- Z is X+Y.

Ventajas: simplicidad, eficiencia

Inconvenientes: menos usos posibles (no son relacionales)

Predicados Extra-lógicos 22

Predicados extra-lógicos y recursión

factorial(0,1).

factorial(X,F) :-

X > 0, % guarda

X1 is X-1, % reducción

factorial(X1,T),

F is X*T. % composición

La unificación pierde potencia:

no basta para distinguir casos base y recursivo

no puede reducir el problema ni componer la solución

Page 12: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 23

Predicados extra-lógicos y recursión de cola

factorial(X,F) :- fact_cola(X,1,F).

fact_cola(0,F,F).

fact_cola(X,Ac,F) :-

X > 0, % guarda

X1 is X-1, % reducción

Ac1 is X*Ac, % actualización

fact_cola(X1,Ac1,F).

La unificación pierde potencia:

no basta para distinguir casos base y recursivo

no puede reducir el problema ni actualizar acumulador

Predicados Extra-lógicos 24

Predicados extra-lógicos y generadores

entre(I,J,I) :-

I =< J.

entre(I,J,K) :-

I < J,

I1 is I+1,

entre(I1,J,K).

Uso Comportamiento Significado

(+,+,+) test comprueba I ���� K ���� J

(+,+,-) generador acotado genera K= I,…,J

Los casos base y recursivo no son excluyentes � generación

Page 13: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 25

Predicados extra-lógicos y generar/comprobar

Problema: descomponer un natural N en suma de dos pares X e Y

% es_par(+X)

es_par(X) :- X mod 2 =:= 0.

% en_pares(+N,?X,?Y)

en_pares(N,X,Y) :-

es_par(N), % comprobar

entre(0,N,X), % generar (acotado)

es_par(X), % comprobar

Y is N-X. % generar (único)

Predicados Extra-lógicos 26

Aplicación: puzzles cripto-aritméticos

Problema: Dada la suma de letras

C A M A

+ M E S A

V I C I O

asignar a cada letra un dígito distinto entre 0 y 9 de manera que la suma resultante cuadre

Sugerencia: aplicar el paradigma generar/comprobar

Page 14: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 27

Ejercicios

Define los siguientes predicados:

1. es_natural(X), genera los naturales X = 0,1,2,3,…

2. es_entero(X), genera los enteros X = 0,-1,1,-2,2,…

3. num_digitos(X,Y), el entero X tiene Y digitos

4. dig_iesimo(X,I,D), D es el I-ésimo dígito del entero X

5. mcd(X,Y,Z), Z es el máximo común divisor de X e Y

6. pascal(I,J,X), X es el elemento (I,J) del triángulo de Pascal

7. fibonacci(N,F), F es el N-ésimo Fibonacci

8. biseccion(F,A,B,R), R es una raíz de la función F en el intervalo [A,B]

Predicados Extra-lógicos 28

Ejercicios

9. Resuelve el puzzle cripto-aritmético:

S E N D

+ M O R E

M O N E Y

10. Dada la matriz de orden 3A B C

D E F

G H I

asigna a cada letra un dígito distinto, de manera que las filas,columnas y diagonales principales sumen 15

Page 15: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Entrada/Salida de Términos

Predicados Extra-lógicos 30

Periféricos y flujos

La entrada/salida de Prolog está basada en flujos:

los flujos permiten tratar uniformemente una variedad de periféricos, como una secuencia de información

un flujo es un tipo abstracto que soporta, entre otras, operaciones de apertura, cierre, lectura y escritura

un flujo puede estar en cuatro modos de operación: entrada, salida, concatenación y actualización

un flujo soporta tres tipos de información: binarios, texto y términos

Page 16: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 31

Flujos de términos y entrada/salida estándar

un flujo de términos es una secuencia de términos Prologterminados en un punto y separados por blancos (espacios, tabuladores y saltos de línea)

Ejemplo:t(h(X), a). f(A,1+2).

4*pi.

s(s(s(c))). s(s(a)).

sólo se pueden leer y escribir términos completos

para simplificar, emplearemos flujos de términos asociados a laentrada y salida estándar (por defecto, teclado y pantalla)

Predicados Extra-lógicos 32

Términos Prolog y salida estándar

write(+X)

escribe el término X en la salida estándar

nl

escribe un fin de línea en la salida estándar

tab(+N)

escribe N espacios en la salida estándar (N es una expresión aritmética entera)

display(+X)

escribe el término X en la salida estándar (sin tener en cuenta las declaraciones de operadores)

Page 17: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 33

Ejemplos de salida estándar

?- write(2*5+1). % Prolog no evalúa los términos

2*5+1

?- write(s(s(X))). % X está libre

s(s(_G278))

?- display(2*5+1). % tal y como lo entiende Prolog

+(*(2,5),1)

?- tab(3+5), write(a). % tab/1 es aritmético

a

Predicados Extra-lógicos 34

Términos Prolog y entrada estándar

read(-X)

lee el siguiente término de la entrada estándar y lo unifica con X, acabando en éxito o fracaso. Aunque es un generador único, cada reevaluación puede generar una respuesta distinta (efecto lateral)

Ejemplo:?– read(X). ?- read(fecha(D,M,A)).

:| f(A,2*pi). |: fecha(2,febrero).

X = f(_G275,2*pi) No

Yes

Prolog muestra el cursor |: cuando espera datos por teclado

Page 18: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 35

Ejemplo: una calculadora simple (I)

Escribir un programa Prolog que acepte por teclado expresiones aritméticas sin variables y muestre el resultado de evaluarlas. El programa debe terminar al introducir la palabra fin.

Ejemplo:?- calc.

>> 2+3*5.

17

>> sin(pi) + cos(pi).

-1

>> fin.

Yes

Predicados Extra-lógicos 36

Ejemplo: una calculadora simple (y II)

calc :-

write('>> '),

read(Exp),

evalua(Exp).

evalua(fin).

evalua(Exp) :-

Exp \= fin, % Exp y fin no unifican

R is Exp,

write_ln(R), % write + nl

calc.

Page 19: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Unificación y No Unificación

Predicados Extra-lógicos 38

Unificación y no unificación

?X = ?Y

unifica X con Y, instanciando variables (test o generador único)

no tiene en cuenta el test de ocurrencia

+X \= +Y

comprueba que X e Y no unifican (test, no instancia variables)

no tiene en cuenta el test de ocurrencia

unify_with_occurs_check(?X,?Y)

unifica X con Y, instanciando variables (test o generador único)

tiene en cuenta el test de ocurrencia

No son extra-lógicos

Page 20: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Comparación de Términos

Predicados Extra-lógicos 40

Orden estándar de los términos

Prolog define una relación de orden total sobre los términos:

1. variables < números < átomos < estructuras

2. las variables se comparan por la “edad”: antigua < nueva

3. los números se comparan por su valor

4. los átomos se comparan alfabéticamente

5. las estructuras se comparan:

primero, numéricamente por la aridad,

después, alfabéticamente por el átomo del functor

recursivamente, argumento a argumento de izq. a der.

Los términos Prolog satisfacen la propiedad de tricotomía

Page 21: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 41

Comparación de términos Prolog

Prolog predefine los siguientes operadores:

+X == +Y

+X \== +Y

+X @< +Y

+X @> +Y

+X @=< +Y

+X @>= +Y

todos son tests (+,+), no instancian variables

el evaluador extra-lógico ejecuta la comparación según el orden estándar, dando lugar a un éxito o un fracaso

Predicados Extra-lógicos 42

Ejemplos de comparación de términos

?- 1 + 2 == 1 + 2.

Yes

?- 1 + 2 == 2 + 1. % no evalúa

No

?- 1 + 2 =:= 2 + 1.

Yes

?- f(X) == f(Y). % no instancia

No

?- f(X) = f(Y).

X = Y = _G251

Page 22: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Declaración de Operadores

Predicados Extra-lógicos 44

Operadores Prolog

mejoran la legibilidad, permitiendo prescindir de los paréntesis

son una mera facilidad sintáctica, no tienen asociada ninguna operación (semántica)

Ejemplo:

2 + 3 * 5 = +(2,*(3,5))

la precedencia y asociatividad evitan ambigüedades que resultan al prescindir de los paréntesis

Ejemplo:X ** 3 mod 13 = (X**3) mod 13

1+2-3+4-5 = (((1+2)-3)+4)-5

Page 23: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 45

Precedencia de operadores

cada operador tiene asignada una precedencia (1..1200)

Dado un término Prolog, su precedencia es:

si es compuesto � la de su functor principal

si no es compuesto (constante o variable) � 0

si está entre paréntesis � 0

Ejemplo: 2 + A * 3 % prec: + ���� 500 * ���� 400

+

2 *

A 3

500

400

mayor precedencia

menor precedencia

Predicados Extra-lógicos 46

Asociatividad de operadores

se aplica cuando coinciden las precedencias

un operador puede ser:

asociativo a la izquierda: su argumento izquierdo puede tener menor o igual precedencia

asociativo a la derecha: su argumento derecho puede tener menor o igual precedencia

no asociativo: sus argumentos deben tener menor precedencia

Ejemplo: A * B / 2 % *,/ ���� 400, asoc. izq.

/

* 2

A B

400

400

Page 24: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 47

La directiva op/3

El programador puede declarar sus propios operadores:

:- op(+Precedencia, +Tipo, +Nombre).

Precedencia: un entero entre 1 y 1200

Tipo: indica posición (f) y asociatividad (y) o no (x)

yfx infijo, asociativo a la izquierda

xfy infijo, asociativo a la derecha

xfx infijo, no asociativo

fy prefijo, asociativo

fx prefijo, no asociativo

yf postfijo, asociativo

xf postfijo, no asociativo

Nombre: átomo

Predicados Extra-lógicos 48

El predicado current_op/3

Permite consultar qué operadores hay predefinidos y declarados:

current_op(?Precedencia, ?Tipo, ?Nombre)

Ejemplo:

?- current_op(P,T,-).

P = 500

T = fx ;

P = 500

T = yfx ;

No

Page 25: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 49

Ejemplo: ¿quién habla qué?

Operador::- op(800,xfx,habla).

Predicado:% habla/2: persona habla idioma.

elena habla ingles. elena habla frances.

juan habla ingles.

francisco habla ingles. francisco habla aleman.

marisa habla esperanto. marisa habla italiano.

Objetivos:

?- Quien habla ingles.

?- elena habla Que.

?- Quien habla Que.

Predicados Extra-lógicos 50

Aritmética de Peano y operadores (I)

Objetos: declaramos un operador para representar naturales

:- op(100,fy,s).

Ejemplo: s s s s c ���� s(s(s(s(c))))

Definición de dominio: declaramos un operador es_natural

:- op(800, fx, es_natural).

es_natural c.

es_natural s X :- es_natural X.

Page 26: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 51

Aritmética de Peano y operadores (II)

Relaciones aritméticas: los operadores aritméticos están predefinidos (+,*,**,…)

Ejemplo: podemos escribir s s s c + s s c

Problema: los operadores aritméticos son binarios (+/2), y las relaciones aritméticas son ternarias (suma/3)

% suma/3

c + Y ??? :- …

s X + Y ??? :- …

¿Cómo lo resolvemos?

Predicados Extra-lógicos 52

Aritmética de Peano y operadores (y III)

Solución: introducimos un operador que conecte una operación aritmética básica con su resultado

:- op(800,xfx,=´).

El predicado =´/2 es una versión lógica (simplificada) de is/2

A =´ B

B es el natural que resulta de la operación aritmética A

Ejemplo:% =´/2, operación +

c + Y =´ Y :- es_natural Y.

s X + Y =´ s Z :- X + Y =´ Z.

Page 27: Predicados Extra-lógicoslopez/progdec/prolog/apuntes/03-extralogica/extra... · Predicados Extra-lógicos Ingeniería Informática Ingeniería Técnica en Informática de Sistemas

Predicados Extra-lógicos 53

Ejercicios

1. Define otros predicados de la aritmética natural mediante operadores (producto, potencia, factorial,…). Aplica recursión de cola cuando sea conveniente.

2. Declara operadores cm y m para representar medidas de longitud expresadas en centímetros y metros:

37.5 cm 4 m

Declara un operador := y define un predicado que permita sumar longitudes, expresando el resultado en la mayor unidad, tal y como muestran los objetivos:

?- 1 cm + 3 cm := 4 cm.

Yes

?- 37.5 cm + 4 m := X.

X = 4.375 m