• No se han encontrado resultados

Programación Exploratoria - Predicados Predefinidos en Prolog -

N/A
N/A
Protected

Academic year: 2021

Share "Programación Exploratoria - Predicados Predefinidos en Prolog -"

Copied!
23
0
0

Texto completo

(1)

Programación Exploratoria

- Predicados Predefinidos

en Prolog

-Universidad Nacional del Centro de la Provincia de Buenos Aires Facultad de Ciencias Exactas

(2)

Tipos de Predicados

Construcción

 

de

 

Predicados

 

o

 

Consultas

:

 

and,

 

or,

 

call

Análisis

 

Términos

:

 

name

Igualdad

:

 

=,

 

==,

 

\=,\==

Comparación

 

de

 

números:

 

=,

 

\=,

 

<,

 

=<,

 

>,

 

>=

Verificación

 

de

 

tipos

 

de

 

términos

:

 

atom,

 

integer,

 

atomic,

 

var,

 

nonvar,

 

float,

 

compound

Aritmética

 

Entera:

 

+,

 ‐

,

 

*,

 

/,

 

mod,

 

is

(3)

Base

 

de

 

datos

 

de

 

ejemplo

Base de datos del TP1, Ej 1.

vuelo(buenos_aires, cordoba). 

vuelo(buenos_aires, santa_rosa). 

vuelo(buenos_aires, san_juan). 

vuelo(cordoba, santa_fe). 

vuelo(cordoba, tucuman). 

vuelo(cordoba, santa_rosa). 

vuelo(san_juan, tucuman). 

vuelo(san_juan, mendoza). 

vuelo(san_juan, neuquen). 

vuelo(mendoza, cordoba). 

vuelo(santa_rosa, san_juan). 

(4)

And

Term1

 

,

 

Term2

 

(and):

 

Es

 

verdadero

 

si

 Term1

es

 

verdadero

 

y

 

Term2

es

 

verdadero

?

vuelo(buenos_aires,

 

cordoba),

 

vuelo(cordoba,

 

santa_fe).

 

Yes

?

vuelo(buenos_aires,

 

cordoba),

 

vuelo(cordoba,

 

posadas).

 

No

(5)

Or

Term1;

 

Term2

 

(or):

 

Es

 

verdadero

 

si

 Term1

es

 

verdadero

 

o

 

si

 

Term2

es

 

verdadero

?‐ vuelo(buenos_aires, cordoba); vuelo(cordoba, posadas). 

Yes

?‐ vuelo(buenos_aires, rio_de_janeiro); vuelo(buenos_aires, sao_pablo). 

No

En la definición de reglas, el OR puede reemplazarse por múltiples definiciones ruta(X,Y):‐vuelo(X,Y).  ruta(X,Y):‐ vuelo(X,Y); (ruta(X,Z), 

vuelo(Z,Y)).

ruta(X,Y):‐ruta(X,Z), vuelo(Z,Y).

(6)

Call

call(+Term):

 

es

 

verdadero

 

si

 

y

 

solo

 

si

 Term

representa

 

un

 

objetivo

 

el

 

cual

 

es

 

verdadero

?

call(

 

vuelo(buenos_aires,

 

cordoba)

 

).

Yes

?

call(

 

vuelo(cordoba,

 

posadas)

 

).

 

No

(7)

Name

name(+Term,?List):

 

Relaciona

 

un

 

átomo

 

con

 

su

 

lista

 

de

 

caracteres

 

(código

 

ASCII).

?

name(apple,

 

X).

Yes

X=[97,112,112,108,101]

?

name(apple,

 

[97,

 

112,

 

112,

 

108,

 

101]).

Yes

(8)

Igualdad:

 

=,

 

==,

 

\=,

 

\==

En

 

general,

 

•‘=‘

se

 

utiliza

 

para

 

comparar

 

y

 

asignar

 

una

 

variable

•‘=‘

considera

 

a

 

una

 

variable

 

libre

 

como

 

igual

 

a

 

cualquier

 

término,

 

dado

 

que

 

siempre

 

puede

 

unificar

 

(matching)

 

con

 

dicho

 

término.

•‘==‘

se

 

utiliza

 

sólo

 

para

 

comparar,

 

es

 

más

 

restrictivo

•‘==’

sólo

 

considera

 

a

 

una

 

variable

 

libre

 

igual

 

a

 

otra

 

variable

 

libre

Si

 

X==Y,

 

entonces

 

X=Y

 

(pero

 

no

 

al

 

revés)

‘=’ es

 

el

 

opuesto

 

de

 

‘\=’,

 

y

 

‘==’ el

 

opuesto

 

de

 

‘\==’

?Term1 = ?Term2. (COMPARA Y ASIGNA) ?Term1 \= ?Term2. (COMPARA Y ASIGNA)

?Term1 == ?Term2 (más restrictivo que “=“)  (SOLO PARA COMPARAR) ?Term1 \== ?Term2 (más restrictivo que “\=“) (SOLO PARA COMPARAR) Igualdad

(9)

Igualdad

Ejemplos

?

X

 

=

 

Y.

Yes

?

X

 

=

 

2

Yes

?

X

 

==

 

Y.

Yes

?

X

 

==

 

2

No

?

X=Y

 

,

 

X==Y.

Yes

?

X\=Y.

No

?

X\=2.

No

?

X\==Y.

No

?

X\==2.

Yes

Igualdad

(10)

Comparación de números: =, \=, <, =<, >, >=

=

 

:

 

Igual

\=

 

:

 

Distinto

<

 

:

 

Menor

=<

 

:

 

Menor

 

o

 

igual

>

 

:

 

Mayor

>=

 

:

 

Mayor

 

o

 

igual

?

1=1.

Yes

?

1=2.

No

?

1<2.

Yes

?

1>1.

No

?

1>=1.

Yes

?

1>1;1=1

Yes

Comparación de números

(11)

Atom

atom(+Term):

 

el

 

predicado

 

atom

 

tendrá éxito

 

si

 

el

 

argumento

 

es

 

un

 

átomo

 

o

 

una

 

variable

 

instanciada

 

previamente

 

con

 

un

 

átomo

Átomos

:

 

Son

 

palabras

 

que

 

no

 

requieren

 

de

 

una

 

sintaxis

 

especial.

 

Sin

 

embargo,

 

los

 

átomos

 

que

 

contienen

 

espacios

 

o

 

algunos

 

otros

 

caracteres

 

especiales

 

deben

 

estar

 

rodeados

 

por

 

comillas

 

simples

 

(o

 

los

 

que

 

empiezan

 

con

 

letra

 

capital

 

para

 

distinguirlos

 

de

 

las

 

variables).

 

La

 

lista

 

vacía

 

también

 

es

 

un

 

átomo.

 

Ejemplos

 

de

 

átomos:

 

x,

 

blue,

 

'Taco',

 

and

 

'some

 

atom'.

 

(12)

Atom

 ‐

Ejemplos

?‐ atom(abc). Yes ?‐ atom(‘Programación Exploratoria’). Yes ?‐ Var=abc,  atom(Var). Yes, Var=abc

El predicado atom fallará si el argumento es 

una variable sin instanciar, un número o un 

objeto estructurado (incluyendo una lista) Ejemplo: ?‐ atom(X). No ?‐ atom(13). No ?‐ atom([1,2,3|[X]]). No ?‐ atom([]). Yes Verificación de tipos

(13)

Integer

integer(+Term):

 

integer

 

tendrá éxito

 

si

 

el

 

argumento

 

es

 

un

 

entero

 

o

 

una

 

variable

 

previamente

 

instanciada

 

con

 

un

 

entero

Integer fallará si el argumento es una variable 

sin instanciar, un átomo, un número flotante o 

un objeto estructurado ?‐ integer(Var). No ?‐ integer(abc). No ?‐ integer(1.3). No ?‐ integer([a,b,c]). No ?‐ integer(1). Yes ?‐ Var=2, integer(Var). Yes Verificación de tipos

(14)

Atomic

atomic(+Term):

 

tendrá éxito

 

si

 

el

 

argumento

 

es

 

un

 

integer,

 

un

 

átomo

 

o

 

una

 

variable

 

previamente

 

instanciada

 

con

 

un

 

átomo

 

o

 

un

 

integer.

atomic(X) :‐ integer(X).

atomic(X) :‐ atom(X). 

atomic fallará si el argumento es una variable sin 

instanciar o un objeto estructurado ?‐atomic(Var). No ?‐atomic(a(x,y,z)). No ?‐atomic([a,b,c]). No ?‐atomic([]). Yes ?‐ atomic(abc). Yes ?‐ atomic(1). Yes ?‐ Var=abc, atomic(Var). Yes ?‐ Var=1, atomic(Var). Yes Verificación de tipos

(15)

Float

float(+Term):

 

float

 

tendrá éxito

 

si

 

el

 

argumento

 

es

 

un

 

flotante

 

(con

 

punto)

 

o

 

una

 

variable

 

previamente

 

instanciada

 

con

 

un

 

flotante

Float fallará si el argumento es una variable sin 

instanciar, un átomo o un objeto estructurado: ?‐float(Var). No ?‐float(abc). No ?‐float(a(b,c)). No ?‐float([a,b,c]). No ?‐float(1.3). Yes ?‐float(0). No Verificación de tipos

(16)

Var

var(+Term):

 

Es

 

verdad

 

cuando

 

+Term es

 

una

 

variable

 

sin

 

instanciar.

 

Una

 

variable

 

sin

 

instanciar

 

puede

 

representar

 

parte

 

de

 

una

 

estructura

 

que

 

aún

 

no

 

ha

 

sido

 

instanciada.

 

Var fallará si el argumento es una variable 

instanciada, un átomo, un número o un objeto 

estructurado  ?‐ var(abc). No ?‐ var(123). No ?‐ var(a(X,Y,Z)). No ?‐ var([X,Y,Z]). No

?‐X=Y, Y=23, var(X). No ?‐var(X). Yes ?‐Var1=Var2,  var(Var1). Yes Verificación de tipos

(17)

Nonvar

nonvar(+Term):

 

Tiene

 

éxito

 

si

 

Term NO

es

 

una

 

variable

 

libre.

 

Es

 

el

 

opuesto

 

del

 

predicado

  

var(+Term).

Nonvar fallará si el argumento es una 

variable sin instanciar ?‐nonvar(Var). No ?‐nonvar(abc). Yes ?‐nonvar(1). Yes ?‐nonvar(a(x,y,z)). Yes ?‐nonvar([X,Y,Z]). Yes

Si una variable es previamente instanciada también se tiene éxito: ?‐Var=abc, nonvar(Var).

Yes

(18)

Compound

compound(+Term):

 

tendrá éxito

 

si

 

el

 

argumento

 

es

 

una

 

estructura

 

o

 

una

 

lista

compound fallará si el argumento es una 

variable sin instanciar, un átomo o un número: Ejemplos: ?‐ compound(Var). no ?‐ compound(abc). no ?‐ compound(1). no ?‐ compound(a(X)). Yes ?‐ compound([a, B]). Yes Verificación de tipos

(19)

Aritmética

 

Entera:

 

+,

 ‐

,

 

*,

 

/,

 

mod,

 

is

+

 

:

 

Suma

:

 

Resta

*

 

:

 

Multiplicación

/

 

:

 

División

mod

 

:

 

Módulo

is

 

:

 

Comparación/Asignación

 

aritmética

 

?

X

 

=

 

1+2

Yes,

 

X=+(1,2)

?

X

 

is

 

1+2.

Yes,

 

X=3

?

X

 

=

 

3

 

mod

 

2

 

Yes,

 

X=mod(3,2)

?

X

 

is

 

3

 

mod

 

2

Yes,

 

X=1

Aritmética Entera

(20)

Functor

functor(T,F,N):

T

 

es

 

una

 

estructura

 

con

 

nombre

 

o

 

functor

 

F

 

y

 

aridad

 

(cantidad

 

de

 

argumentos)

 

N.

  

Este

 

predicado

 

permite

 

extraer

 

el

 

functor

 

y

 

la

 

aridad

 

de

 

un

 

término

 

cualquiera.

 

Pero,

 

al

 

ser

 

reversible,

 

también

 

permite

 

construir

 

nuevos

 

términos

 

a

 

partir

 

del

 

functor

 

y

 

la

 

aridad

 

deseada.

 

Los

 

modos

 

de

 

uso

 

son

 

(

 

+

 

instanciado,

 ‐

libre):

 

functor(+Termino,+Functor,+Aridad).

functor(+Termino,

Functor,

Aridad).

functor(

Termino,+Functor,+Aridad).

?‐ functor(vuelo(buenos_aires, cordoba), vuelo, 2)    

Yes

?‐ functor(vuelo(buenos_aires, cordoba), vuelo, 4) No

(21)

Functor(T,F,N)

 

Ejemplos

Si T está instanciado…

?‐ functor(vuelo(bsas,cordoba), X, Y). Yes, X=vuelo, Y=2

?‐ functor(cordoba, X, Y). Yes, X=cordoba, Y=0 ?‐ functor([1,2,3], X, Y).

Yes, X=[|], Y=2 (cabeza y cola)

Si T no está instanciado… ?‐ functor(X, vuelo, 2) Yes, X=vuelo(_,_) ?‐ functor(X, vuelo, 0) Yes, X=vuelo Construcción de términos

(22)

Arg

arg(I,T,A).

 

Permite

 

asignar

 

argumentos

 

a

 

términos

 

(T)

 

construidos

 

con

 

functor.

 

Para

 

ello,

 

se

 

indica

 

el

 

número

 

de

 

índice

 

(I)

 

del

 

argumento

 

(A)

 

deseado,

 

empezando

 

a

 

numerar

 

por

 

el

 

1

 

de

 

izquierda

 

a

 

derecha.

 

Los

 

modos

 

de

 

uso

 

es

 

(

 

+

 

instanciado,

 ‐

libre):

 

arg(+Indice,+Termino,+Argumento).

arg(+Indice,+Termino,

Argumento).

 

arg(+Indice,

Termino,+Argumento).

 

arg(

Indice,+Termino,+Argumento).

 

?‐ arg(2, vuelo(bsas, cordoba), X) Yes, X=cordoba

?‐ arg(X, vuelo(bsas, cordoba), cordoba) Yes, X=2

?‐ functor(X, vuelo, 2), arg(1, X, bsas), arg(2, X, cordoba) Yes, X=vuelo(bsas, cordoba)

(23)

Programación Exploratoria

- Predicados Predefinidos

en Prolog

-Universidad Nacional del Centro de la Provincia de Buenos Aires Facultad de Ciencias Exactas

Referencias

Documento similar

Vuelo sobre Espacios Naturales Protegidos (Parques Nacionales, Parques Naturales, Reservas Naturales, Monumentos Naturales y Paisajes Protegidos). Vuelo sobre Espacios Red

Previo a los ensayos en vuelo se realizan cálculos sobre un modelo del avión para predecir la evolución de los parámetros modales y pronosticar cuáles van a ser los modos

Ella estaba presentando su trabajo en común con Roberto sobre la identificación y caracterización de la bautizada por ellos miotubulina, una de las proteínas musculares de

​En cuanto

De ahí que, la defensa aérea, como capacidad de la Fuerza Aérea, comenzaba a trabajar no solo en la limi- tada vigilancia por mantener el control del espacio aéreo en las

El mejor instructor es aquel que tiene una gran experiencia de vuelo, amplios.. conocimientos de la profesión y con habilidades docentes

Desayuno en el hotel y tiempo libre hasta la hora del traslado al aeropuerto para los trámites de facturación y embarque.. Salida del vuelo

Objeto del contrato: Servicio de agencia de viajes para reserva de vuelo y alojamiento. CPV: 63510000-7 - Servicios de agencias de viajes y servicios