Académique Documents
Professionnel Documents
Culture Documents
La programación declarativa
La programación funcional.
La programación declarativa gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que
no es más que una evolución de los predicados), de corte más matemático.
Los lenguajes lógicos
Prolog
Godel
Curry
CARACTERÍSTICA PROLOG HASKELL
Prolog es un lenguaje lógico, utilizado para programar en el campo Es un lenguaje de programación estandarizado multipropósito
¿Qué es? de la inteligencia artificial. puramente funcional con semánticas no estrictas y fuerte
tipificación estática.
Las variables son cadenas de letras, dígitos y el signo '_'. Estas Podemos almacenar resultados intermedios asignándoles
empiezan con una letra mayúscula o el símbolo '_': nombres. Estos nombres se llaman variables. Cuando se ejecuta
un programa, cada variable se sustituye por el valor al que se
X refiere. Por ejemplo, considere el siguiente cálculo
Objeto2
_23
Resultado Preludio> 3.141592653 * 5 ^ 2
_x23 78.539816325
Lista_Participantes
Esa es el área aproximada de un círculo con radio 5 , de acuerdo
Cuando una variable aparece en una cláusula sola, no se necesita
VARIABLES inventar un nombre para ella. Se usa llamarla variable "anónima", con la fórmula . Por supuesto, es engorroso escribir los
cuando es escrito únicamente el signo '_'. Por ejemplo, consideremos
la siguiente regla: dígitos de , o incluso para recordar más que los primeros. La
programación nos ayuda a evitar la repetición sin sentido y la
hijo(X) :- padre (X,Y). memorización al delegar estas tareas en una máquina. De esta
forma, nuestras mentes se mantienen libres para tratar con ideas
más interesantes. Para el presente caso, Haskell ya incluye una
La regla dice: para toda X, X tiene un hijo si X es el padre de alguna
Y. Nosotros estamos definiendo la propiedad hijo el cual, no depende variable llamada pi que almacena más de una docena de dígitos
del nombre del hijo. Entonces, aquí hay un lugar en donde podemos
usar una variable anónima. Si rescribimos la cláusula: para nosotros. Esto permite no solo un código más claro,
sino también una mayor precisión.
hijo(X) :- padre(X,_).
Los operadores aritméticos incluyen los símbolos para suma, resta,
IMPORTANCIA DE CADA VARIABLE
multiplicación y división. En Prolog, si dos enteros son sumados,
restados o multiplicados, el resultado será un entero. Siempre que infixr 9 ·
uno de los operandos, en cualquiera de estas operaciones sea un
infixl 9 !!
número real, el resultado siempre será un real. El resultado de una
división, siempre que los operandos sean enteros o reales, será infixr 8 ↑, ↑↑, ∗∗
siempre real.
infixl 7 ∗, /, ’quot’, ’rem’, ’div’, ’mod’
ARITMÉTICOS
infixl 6 +, -
Todas las versiones de Prolog soportan los siguientes operadores infixr 5 :, ++
aritméticos, listados en el orden de prioridad de ejecución.
infix 4 ==, 6=, <, ≤, ≥, >, ’elem’, ’notElem’
+ --> SUMA infixr 3 &&
- --> RESTA infixr 2 k
* --> MULTIPLICACIÓN
/ --> DIVISIÓN infixl 1 , =
// --> DIVISIÓN ENTERA infixr 1 =
OPERADORES MOD --> RESIDUO
^ --> POTENCIA infixr 0 $, $!, ’seq’
Cualquier operador puede usarse de modo prefijo o
Los paréntesis se pueden utilizar para dar preferencia de ejecución infijo,
en una expresión compuesta. Prolog utiliza la precedencia de
operadores con la regla de la mano izquierda. independientemente de cómo esté declarado
infix 4 ∼=
A continuación se muestran algunas operaciones más complejas que
PROLOG provee: (∼=) :: Float -> Float -> Bool
(∼=) x y = abs (x - y) < 0.0001
OPERACIÓN DESCRIPCIÓN
Sqrt(X) Calcula la raíz cuadrada de la variable Toda funci´on puede convertirse en un operador si se
log(X) Calcula el logaritmo de X escribe
ln(X) Calcula el logaritmo natural de X entre acentos franceses:
abs(B) Regresa el valor absoluto de B
suma :: Integer -> Integer -> Integer
sin(T) Seno de T
cos(A) Coseno de A suma x y = x + y
tan(C) Tangente de C x ’suma’ y = x + y
RELACIONALES Main> suma 1 2 Main> 1 ’suma’ 2
Se puede dar prioridad y asociatividad al uso infijo de
Prolog soporta los siguientes operadores relacionales:
cualquier función: infixl 6 ’suma’
= --> IGUAL QUE
> --> MAYOR QUE Operadores son funciones binarias cuyo nombre es simbólico
>= --> MAYOR O IGUAL QUE
>= --> MENOR O IGUAL QUE (cadena de signos, no letras)
<> --> DESIGUAL QUE Pueden ser invocados de forma infija
=/= --> DIFERENTE QUE
is --> EVALUADOR DE EXPRESIÓN Hay operadores predefinidos como &&, ||, +, −, ∗, /y ↑
seed --> GENERADOR DE NÚMEROS ALEATORIOS
Podemos definir nuevos operadores utilizando uno o más de
Cuando dos objetos que son símbolos o cadenas de caracteres son los siguientes símbolos:
comparados, los caracteres son convertidos a su equivalente ASCII.
: ! #$%& ∗ + · / <=>?@\ ↑ |− ∼
El valor de cada carácter es examinado a partir del operador
relacional, de izquierda a derecha. ∼ solo una vez y al principio. Solo es reservado
Los operadores que comienzan por (:) tienen un significado
especial, constructores infijos de datos
Ejemplos de operadores:
+ + + && || ≤ == 6= · // $ predefinidos
@@ % − + −
WV<+>?
Reservados: :: → ⇒ : .. = @ \ | ← ∼
Un predicado es la relación directa con una expresión. Cada Es posible escribir varias expresiones matemáticas directamente
predicado usado en una cláusula de Prolog debe ser declarado, en ghci y obtener un resultado. Prelude es el prompt por defecto
basado en la declaración de los tipos de dominios para cada uno de de GHCi.
los nombres de los objetos.
Donde Día es una variable que puede ser instanciada por cualquier objeto
en cualquier momento de la ejecución del programa. Sintácticamente, todos
los objetos de datos en Prolog son términos. Por ejemplo, enero
y date(1,enero,1975) son términos.
Consultas
{- Esto es un comentario
de m´as de una l´ınea -}
g :: Integer → Integer
g x = x – 1
La programación lógica está basada en la noción de relación. Debido Un patrón es una expresión como argumento
a que en la relación es un concepto más general de una aplicación. en una ecuación
La programación lógica es potencialmente de alto nivel. Considerar • Es posible definir una función dando más de
2 conjuntos de valor S y T, R es la Relación entre S y T, para toda X Una ecuación para ´esta.
que pertenece a S y Y que pertenece a T y R(X,Y) es verdadero o X Al aplicar la función a un parámetro concreto
falso. Dado a, determinar el valor m(a). En la programación Lógica la comparación de patrones determina la ecuación
se implementa las relaciones. Sea R una relación: a utilizar.
Patrones constantes
Dado a y b, determinar cuando R(a,b) es verdadero. Un patrón constante puede ser un número, un
Dado a, encontrar todos los Y/R(a,y) es verdadero. Carácter o un constructor de dato.
RELACIONES/ Dado b, encontrar todos los X/R(x,b) es verdadero.
PATRONES Encontrar X y Y/R(x,y) es verdadero. f :: Integer → Bool
f 1 = True
f 2 = False
1. ghci
:?-easter(2000,Y,D).
Y=4, Nota
D=23. Si deseamos salir de la consola de Haskell escribimos:
Easter es un programa que se encuentra en la carpeta de Examples
que vienen en prolog.
1. :q
P1^P2^...^Pn Þ Q
Q:-p1 ^p2 ^...^Pn Cláusula = Clause
Implicación Premisa
\ Q es una conclusión Q:-P1,P2,...Pn.