Beruflich Dokumente
Kultur Dokumente
PROGRAMACION
FUNCIONAL
y LAMBDA
r
CALCULO
Resumen
En la primera parte de este artculo se explican imposible) realizar operaciones que matemticamente
algunos conceptos de los lenguajes de son importantes, tales como la composicin de
programacin, haciendo nfasis en las caracteristicas funciones. Los lenguajes funcionales surgen como
y propiedades de los lenguajes de programacin una forma de llenar este vaco, dndoles a las
funcional. En la segunda, se realiza una introduccin funciones un valor de primer orden, gracias a lo
al lambda clculo puro, su notacin, axiomas y reglas cual stas pueden tratarse como cualquier dato,
elementales. permitindose incluso utilizar una funcin como
parmetro de otra funcin.
INGENIERA E INVESTIGACIN
otros. La implementacin de lenguajes funcionales Los nmeros reales pOSltlVOS pueden
conlleva la construccin de una sintaxis y semntica definirse por las siguientes reglas:
fciles de definir a partir del clculo lambda. Si un
lenguaje funcional permite realizar asignacin y Un nmero real positivo est formado por
evaluacin de expresiones no es puro, de otra forma dos secuencias de dgitos separadas por
es puro. un punto. La primera es finita.
Una secuencia de dgitos est compuesta
El clculo lambda permite estudiar las por uno o ms dgitos.
propiedades de las funciones, de tal forma que se UndgitoesO,I,2,3,4,5,6,7,8 9.
constituye en la teora que formaliza los lenguajes
funcionales, facilitando la rigurosa evaluacin y UsandoBNF:
prueba de expresiones. La forma elemental de ver el
clculo lambda puro es: Ax.M que constituyen las <nmero-real> ::= <secuencia-dgitos>.
llamadas abstracciones, donde x es el parmetro de <secuencia-dgitos>
la funcin y M el cuerpo. MN es la aplicacin de la <secuencia-dgitos> ::= <dgitoc+cdlgito>
funcin M aN Visto como una gramtica de trminos <secuencia-dgitos>
<dgito> ::= 0111213141516171819
es M:=xl(MM2JI(Ax.MJ.
en donde
I.SINTAXIS Y SEMNTICA
< > : encierran variables representando
En ciencias de la computacin uno de los constructores
fundamentos para el desarrollo de lenguajes de : se lee como "es"
programacin consiste en el estudio de la forma de : se lee como "o", - disyuncin-.
escribir los programas y el significado e
interpretacin de los mismos. Cada opcin separada por 1 es una regla
distinta; por ejemplo:
A. Forma de Backus - Naur
<secuencia-dgitos> ::= <dgito> 1<dgito>
Todos los elementos que componen un <secuencia-dgitos>
lenguaje, junto con sus relaciones, hacen deducir
un conjunto de reglas que lo determinan. Los Se puede escribir como:
smbolos atmicos de un lenguaje se conocen como
componentes lxicos o smbolos terminales; los <secuencia-dgitos> ::= <dgito>
smbolos no terminales son llamados constructores <secuencia-dgitos> ::= <dgito>
de un lenguaje. El smbolo no terminal que representa <secuencia-dgitos>
al constructor principal de un lenguaje se denomina
smbolo no terminal inicial. En este caso, los smbolos terminales son los
dgitos (0,1,2, etc.) y el punto. Los constructores
Una de las gramticas independientes de son los smbolos no terminales, como <secuencia-
contexto ms usadas para especificar la sintaxis de dgitos>.
un lenguaje de programacin es la gramtica BNF
(Backus-Naur Form), la cual se muestra en el A menos que se afirme otra cosa, las
siguiente ejemplo: producciones del smbolo no terminal inicial son las
primeras en aparecer. Adems, hay que aclarar que
Ejemplo: una cadena es una secuencia finita de smbolos
terminales con una longitud igual al nmero de
Describir la sintaxis de los nmeros reales smbolos. La cadena vaca tiene longitud cero.
como 3.14159 con una parte entera, un punto decmal
y una parte fraccionaria. Una expresin es una secuencia de smbolos
que describen un cmputo. Las ms importantes
INGENIERA E INVESTIGACIN
clases de smbolos son constantes, distinta, dado que interesa ms el anlisis del
variables,operadores y parntesis [5]. La notacin lenguaje natural.
de las expresiones es importante debido que
dependiendo de la adopcin de una determinada Semntica se entiende como el significado de
notacin ,un intrprete lee las expresiones y puede sentencias en el lenguaje formal de la lgica
evaluar si una expresin pertenece o no al lenguaje. matemtica [2], o tambin como el desarrollo de
Por ejemplo, un operador binario se aplica a dos formas para expresar lenguajes usados para
operandos en notacin infija cuando el operador programacin de computadores digitales. Esta
se coloca entre los operandos (a *b), prefija cuando ltima caracterizacin es ms conocida como
el operador aparece primero (*ab) y posfija cuando semntica de los lenguajes de programacin, los
el operador va al final (ab*). cuales tradicionalmente se han basado en sentencias
imperativas. En contraste, las sentencias de la lgica
B. Sintaxis matemtica intentan plantear axiomas, reglas,
declaraciones, proposiciones, etctera.
La sintaxis de un lenguaje especifica cmo se
construyen los programas, en dicho lenguaje. La El significado de las palabras, frases,
estructura sintctica, es decir la estructura impuesta expresiones o signos que determinan una idea o
por la sintaxis del lenguaje, constituye la cosa material, debe ser especificado en los lenguajes
herramienta fundamental para trabajar con ste. Por para determinar el significado de un programa. Como
eso se ha utilizado para describir constructores y pueden darse varias especificaciones distintas,
reglas para entender los programas escritos en un dependiendo del lenguaje, una misma sintaxis puede
determinado lenguaje. tener semnticas distintas.
INGENIERA E INVESTIGACIN
II. LENGUAJES FUNCIONALES total = O;
for (i=I; i<=JO; ++i)
Los lenguajes de programacin se dividen {
principalmente en dos clases segn la forma en que total = total+i;
el lenguaje permita definir la obtencin de los }
resultados deseados.
En este caso se trabaja con la asignacin de
un valor a la variable total, cada vez que cumple
Lenguajes declarativos (no procedimen-
una iteracin del ciclo, hasta que al final del ciclo
tales): un programa afirma explcitamente lo
esta variable contenga el valor total de la suma.
que requiere que exhiba el resultado, pero no
afirma cmo debe obtenerse el resultado;
En el caso de un lenguaje declarativo, el
acepta cualquier forma de producir un programa puede expresarse sin actualizacin de
resultado que muestre las propiedades variables. As:
requeridas [3].
sum[J ..JOj.
Lenguajes imperativos (procedimentales):
es el caso contrario de los lenguajes Expresa la suma, donde [1..10] es una expresin
declarativos. Se define explcitamente cmo que representa la lista de enteros de 1 a 10, mientras
ser obtenido el resultado, pero no se define sum es una funcin que puede usarse para calcular
explcitamente qu propiedades se espera que la suma de una lista arbitraria de valores.
exhiba el resultado [3].
En el caso particular de lenguajes funcionales
Caractersticas como ML o SCHEME, es comn encontrar la
solucin del problema utilizando un ciclo finito. En
ML se hace de la siguiente manera, aunque la
El lambda clculo, desarrollado por el lgico
actualizacin de variables no es necesaria:
matemtico Alonso Church [1] ha servido dentro
de la formalizacin de modelos matemticos, para el
let fun sum ita! = if(i=O) then tot else sum(i-J)
diseo de lenguajes de programacin, en especial
(tot+i)
como la base de los lenguajes de programacin in sum JO O
funcional. end
Un lenguaje funcional puede entenderse Donde se define una funcin sum, la cual tiene
como una subclase de los lenguajes declarativos. como resultado tot si i=O; en caso contrario la
Un programa escrito en un lenguaje funcional est funcin se "llama" a si misma en forma recursiva
compuesto de un conjunto de ecuaciones basadas con argumentos (i-J) y (tot+i).
en el uso de valores, funciones y recursin. Estas
ecuaciones operan con funciones y valores En el ejemplo se observa que un resultado
evaluados a partir de funciones primitivas y valores puede obtenerse, utilizando un lenguaje declarativo
provistos por el lenguaje. (por ejemplo uno funcional) o uno imperativo; la
cuestin es definir en qu lenguaje se implementa.
Ejemplo
Otra de las caractersticas importantes de los
lenguajes funcionales es que los usuarios no tienen
Evaluar la suma de los enteros de l a 10.
que preocuparse por el almacenamiento de datos,
ya que se hace manejo de almacenamiento
En un lenguaje imperativo se podra dar
implcito, que consiste en que ciertas operaciones
solucin al problema usando un ciclo finito, que integradas de los datos asignan almacenamiento en
consiste en la actualizacin repetida del valor el momento necesario. El almacenamiento que se
contenido en un contador y la variable acumuladora: vuelve inaccesible se libera, en forma automtica.
INGENIERA E INVESTIGACIN
Esta ausencia de cdigo explcito para la liberacin procesarse y los resultados de estas evaluaciones
de memoria hace a los programas ms sencillos y son necesariamente utilizadas en los niveles
cortos, pero el lenguaje debe estar capacitado para superiores.
recuperar memoria que se vuelve innecesaria.
Ejemplo
m. PROGRAMACIN FUNCIONAL
5+7*(4-30/(4-19)), se puede ver como:
Cuando se habla de programacin funcional, +(5,*(7,-(4/(30,-(4,19)))))
hay que entender que es un mecanismo adoptado
para resolver problemas de programacin utilizando En donde la funcin ms interna - (4,19) sera
un lenguaje funcional, es decir, trabajando con la la primera en resolverse. El resultado de esta
sintaxis y con la semntica que definen ese lenguaje. expresin es 47.
11
1-- INGENIERA E INVESTIGACIN _
Como se haba mencionado, el lambda clculo A. Igualdad en expresiones lambda
puro es una gramtica de trminos, la cual se
especifica as: Escribimos M= f3 N si M y N son iguales segn
la igualdad beta (la cual se explica posteriormente)
y se dice que tienen el mismo valor. Dicho de otra
M:= xl( MI M2)1( Ax. M) que dice que
forma, es aplicar una abstraccin M. M a un
un trmino puede ser una variable x, una aplicacin
argumento N. Se observan aqu las nociones de
(MM) de la funcin M a M2 ' o una abstraccin
invocacin a funcin y el paso de parmetros en
(AX.M). lenguajes de programacin.
Se escribe:
Ax. M: funcin con parmetro x y cuerpo Ejemplo
M
Note que las funciones se escriben junto a Observemos de nuevo la funcin cuadrado
sus argumentos. escritaenML [4]
INGENIERA E INVESTIGACIN
El conjunto libre(M) est formado por todas 2. En otro caso, suponga que la variable y es
las variables libres de M, es decir, las variables que libre en N y acotada en M. La asociacin y
no estn acotadas en M, dadas por las reglas: las apariciones acotadas correspondientes
de y en M se reemplazan de manera
i) libre (x) = {x} "x es libre en el consistente por alguna variable nuevaz o se
trmino x" utilizan ndices posicionales. Se siguen
ii) libre(MN) =libre(M) u libre(N) nombrando las variables acotadas en M
"Una variable hasta que se pueda aplicar el caso 1.
es libre en MN si es Posteriormente se aplica el caso 2.
libre en M o en N'.
Ejemplo
iii) libre(Ax.M) = libre(M) - {x}
(i) M no tiene apariciones acotadas (caso 1).
"Excepto x, todas las
variable son libres en
{u/x}x = u "u reemplazaaxenel cuerpo x ".
Ax.M'
(u/x}(xx) =(uu) "u remplaza a x en el cuerpo xx,
entonces queda uu ".
Nota: x es libre en M si Mtiene la forma AY.N,
{(Ax.X)/X}X =(Ax.X) "Ax.X reemplaza ax en el cuerpo
donde y es diferente de x y la ocurrencia de x en el
x, entonces queda (Ax.X) ".
subtrmino N es libre.
En estos ejemplos, como M no tiene
La variable x en Ax. M se denomina aparicin, apariciones acotadas, es decir no hay restricciones
o simplemente asociacin de x. de mbito en los cuerpos x, (xx) y x, se sigue como
en el casol.
Definicin: todas las apariciones dex en Ax.M
son acotadas dentro del mbito de esta (ii) M no tiene apariciones libres de X.
abstraccin. Todas las apariciones no
acotadas de una variable en un trmino son {u/x}y =y "u reemplazaax en el cuerpo y Como
libres. Adems, toda aparicin de una variable en y no hay apariciones libres de x,
debe ser libre o acotada, pero no entonces queda y
simultneamente.
{(AY.Y)/X) (Ax.X) =Ax.X
Ejemplo "Ax.X reemplaza a las x libres en el
cuerpo Ax.X, como en Ax.X, x es
En (Ay.z)(k.z), la variable z es libre, porque acotada en Ax.X,
es libre en AY.Z. (regla ii). entonces queda Ax.X ".
11,___________;___;__~
_ INGENIERA E INVESTIGACIN _
axioma a permite asignar sistemticamente nuevo
nombre a las variables acotadas. El axioma es el (V) {o/x~Ay.P) = Ay.{o/x}P
siguiente:
si y *' ,y X libreeN).
(Ax. M) = fJ k. {rx} M
D. Igualdad beta
Ejemplo
Reglas Dirigidas por Sintaxis pues (?tx.x)u =lu/x}x=u y (?tx.y)u ={ u/x }y=y
(regla de transitividad)
(Ax.M)N~{NI}M
"Si M=? y N= , entonces M= rt" f3 Ix
(reduccin 13)
Otras reglas son:
Ax.M~Az{zl}M
(iv) a 7x
M=f3M'
z no es libre en M (conversin a)
A1N= f3M'N ,
(regla 1 de congruencia) Una reduccin es cualquier secuencia de
(v) reducciones f3y conversiones a Donde el resultado
de un clculo no depende del orden en el cual se
apliquen las reducciones". Se dice que un trmino
que no puede tener reducciones 13 se encuentra en
forma normal; el trmino Az.z se halla en forma
(regla 2 de congruencia) normal porque ninguno de sus subtrminos es de la
forma (Ax.M)N La forma normal es nica si existe.
Ejemplo
El trmino (Ax.M)N se denomina exred
Sea 1 = Ax.X y S = AxYZ.(XZ)ryz)
o en forma completa:
(expresin a reducir). De esta forma, si, P=; Q
entonces P tiene alguna exred (Ax.M)N que se
S = (Ax. (Ay. (Az. ((xz)ryz))))) reemplaza con {N/x} M para crear Q.
11~
_~~=.=.:...;;,,;;;..;;.;_..;.;;;;.;;...;~:...:...:..;_-
INGENIERA E INVESTIGACIN _
Ejemplo
Estrategia de Reduccin
Ejemplo
(Ax.xx)Ay.y)(k.z))
(Ax.xx)Ay.y)(k.z)) = (Ax.xx)(k.z)
= (k.z)(k.z)
= (k.z)
En el caso de invocacin por nombre.
(Ax.xx)Ay.y)(k.z)) ~ Ay.y)(k.z))Ay.y)(k.z))
f3
~ (k.Z)Ay.y)(k.z))
f3
= (Ay.y)(k.z)
= (k.z)
6. <http://www.cs.not.ac. uk/DepartmentStaff/mpj/
faq.html>
11~ ~==~~-------------------
I INGENIERA E INVESTIGACIN