Sie sind auf Seite 1von 11

,

PROGRAMACION
FUNCIONAL
y LAMBDA
r
CALCULO

Jonatn Gmez Perdomo* -Wilson Castro Rojas** - Alexander Cardona Lpez


Ingenieros de Sistemas
Universidad Nacional de Colombia, Santaf de Bogot.

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.

INTRODUCCIN Un programa desarrollado en lenguaje


funcional se denomina programa funcional. Un
El manejo que se le da a las funciones en los programa funcional se explica como un conjunto de
lenguajes imperativos hace muy complicado (o composicin reiterada de funciones que resuelven
los problemas en un estilo particular. Un programa
funcional puede escribirse en varios lenguajes como
*Docente de la Universidad Nacional de Colombia
**Docente Ocasional Universidad Nacional de Colombia LISP, SML, Miranda, SCHEME (dialecto de LISP) y

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.

Definicin: El constructor de un lenguaje es En programacin es un problema la


una estructura sintctica o conjunto de determinacin de los valores de las variables as
estructuras de un lenguaje, que sirven para como la definicin del ambiente (mbito), en el cual
expresar una clase particular de operaciones el lenguaje puede entender y reconocer una
[3]. expresin, una variable o una funcin. Por tal razn,
en los lenguajes existen reglas para la determinacin
La sintaxis desempea dos funciones del mbito, las cuales son de dos clases: de mbito
principales en los lenguajes de programacin: dinmico, cuando para cualquier estado en que se
primero, la sintaxis abstracta de un lenguaje encuentre un programa las variables pueden tomar
identifica los componentes significativos de cada valores distintos; de mbito esttico, cuando una
constructor. Las descripciones de lenguajes y las vez definido un valor para una variable, la aplicacin
implementaciones estn organizadas alrededor de de ese valor se mantendr en cualquier estado del
las sintaxis abstractas. Segundo, la sintaxis concreta programa a partir de la aplicacin del valor. Adems,
de un lenguaje describe su representacin escrita, todas las funciones poseen una distincin entre lo
incluyendo detalles como la colocacin de palabras que es el ambiente en el cual se define la funcin
claves y los signos de puntuacin [4]. (ambiente de definicin) y el ambiente en el cual se
aplica sta (ambiente de activacin).
C. Semntica
El anlisis semntico ayuda a la
Inicialmente se habl de la semntica en estandarizacin de terminologas y a la identificacin
trabajos que se referan al estudio del cambio de de similitudes y diferencias entre lenguajes. Esto le
significado de las palabras. Hoy generalmente se permite al diseador encontrar restricciones
define como el estudio de las relaciones entre las indeseables, incompatibilidades, ambigedades,
palabras y las instrucciones de un lenguaje escrito etc., mediante el uso de una formalizacin rigurosa
o hablado y su significado. En reas del y pruebas de las propiedades semnticas del
conocimiento como la lingstica y la filosofia, la lenguaje.
palabra semntica tiene una aplicacin un tanto

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.

En programacin funcional, una funcin IV. LAMBDA CLCULO


puede ser el valor de una expresin, puede pasarse
como argumento y puede colocarse en una base de El lambda clculo surge antes que los
datos, esto permite la creacin de operaciones sobre lenguajes de programacin de alto nivel a raz del
colecciones de datos; que en lenguajes imperativos estudio realizado por Alonso Church[ 1] en la dcada
son muy dificiles de realizar o imposibles. del 30, que inicialmente se interesaba en el anlisis
de las funciones. La relevancia del lambda clculo
Existen distintas opiniones, incluso dentro de en ciencias de la computacin slo se apreci en
la comunidad de programacin funcional, respecto 1960, cuando las propiedades bsicas en lenguajes
a su definicin; hasta el momento se propone la de alto nivel se estudiaron, observndose el
siguiente: potencial que tiene el lambda clculo en la
especificacin de los lenguajes de programacin.
Definicin: programacin funcional es un Desde entonces, el lambda clculo es una teora
estilo de programacin que enfatiza la fundamental de aplicacin y abstraccin para el
evaluacin de expresiones, ms que la estudio de tipos' ya que puede verse como una
ejecucin de comandos. Las expresiones en gramtica para trminos de un lenguaje, es decir, el
los lenguajes funcionales se forman mediante lambda clculo permite decidir si una expresin
el uso de funciones que combinan valores pertenece o no al lenguaje.
bsicos [6].
El lambda clculo puro- tiene una sintaxis
El estilo de programacin funcional se pequea compuesta solamente de tres cons-
caracteriza por la ejecucin o evaluacin de tructores: variables, aplicacin de funciones y
funciones, que desde un planteamiento general creacin de funciones.
resuelven problemas con base en una composicin
reiterada de funciones, partiendo de que las 1. El tipo indica los valores que una expresin est en
composiciories ms internas son funciones capacidad de representar y las operaciones que sobre ellas
elementales (primitivas), como por ejemplo la suma se pueden aplicar. Dado que como principio generalizado
en el diseo de lenguajes toda expresin debe tener un tipo,
de dos enteros. En trminos de composicin de entonces los tipos son un mecanismo para clasificar
funciones lo anterior significa: expresiones. Los tipos surgen de diferentes necesidades,
como por ejemplo, el nivel de mquina, dado que los
compiladores necesitan informacin sobre el tipo para
poder generar expresiones en cdigo de mquina, nivel de
lenguaje cuando los tipos estructurados se construyen a
partir de tipos bsicos y nivel de usuario cuando el usuario
puede definir sus propios tipos dependiendo del problema.
Aqu la composicin ms interna (la ms
2. El lambda clculo puro no tiene tipos. Las funciones
bsica) es la que tiene que resolverse primero: en pueden aplicarse sin restricciones, pero teniendo en cuenta
trminos computacionales los niveles ms internos el mbito, el paso de parmetros y las estrategias de
de ejecucin de funciones son los primeros en evaluacin.

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]

\.x.M ~ abstraccin ~ definicin de funcin. fun cuadrado(x) = x*x;

"Determinacin de parmetros y cuerpo de la cuadrado(5) = 5 *5 : es la invocacin de la


funcin" funcin con parmetro 5, tambin la evaluacin
xy ~ aplicacin ~ invocacin. remplazando en el cuerpo de la funcin el parmetro
5.
"Se est invocando la funcin x con parmetro
y, donde y es una funcin o una variable" Utilizando expresiones lambda se puede
escribir:
Se usan las letrasj, x, y, z para variables y M,
N, P, Q para trminos. La letra e se utiliza para Ax. (*xx) es la abstraccin de la funcin
constantes bsicas y funciones constantes. cuadrado.

Sea M el cuerpo *(xx) y N la funcin


Ejemplo' constante 5, entonces

(\.x. (*xx))5 =fJ 25 segn la igualdad beta.


(Ax. X * X )5 : Es una funcin que toma el
valor 5 y le aplica el cuerpo "x*x", haciendo B. Variables libres y Acotadas
corresponder 5*5.(ver nota de pie 4).
La abstraccin \.x.M tambin restringe el valor
"La funcin Ax. x * x se aplica a cinco" se de x en M.M. Entonces, se dice que x est acotada
en \.x.M
escribe ( Ax. x * x ). 5 Ylas frmulas de este tipo se
denominan trminos.

Un lenguaje de programacin funcional es


esencialmente un lambda clculo con constantes 3. La formulacin esencial de algunos ejemplos de esta
seccin, se encuentra en ejemplos del capitulo 12 del texto
apropiadas. Un lambda clculo con tipos se tiene de Sethi[4J.
cuando se asocia un tipo a cada trmino' .
4. En el ejemplo se utiliz (x=x), que no es correcta en
Para profundizar en la nocin de abstraccin expresiones lambda. La notacin prefija *( xx) es la que se
debe utilizar.
y aplicacin se presenta una revisin de la llamada
Igualdad Beta. 5. Un lambda clculo con tipos polimorfos se ha usado
para estudiar los tipos en el lenguaje funcional ML.

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 ".

C. Sustitucin En general, cuando en M no hay variables


libres x para la sustitucin {N/x} entonces queda el
Aplicar una abstraccin Ax. M a un parmetro mismo M, es decir, {N/x} M es M
N se realiza sustituyendo x por N en el cuerpo M Es
decir, N reemplaza todas las apariciones libres de x (iii) u en N tiene apariciones acotadas en M
enM
(caso 2).
La sustitucin de un trmino N por una
{u/x} (M.x) = {u/x} (k.x)= (k.u)
variable x en Mse nota {N/x}My se define as:
{U/X}(AU.U)= {u/x} (k.z) = (k.z)
1. Suponga que las variables libres de N no
Cuando en una sustitucin variables acotadas
tienen apariciones acotadas en M. Entonces,
se encuentran notadas con el mismo nombre de una
el trmino {N/x}M se forma remplazando con
variable para sustituir, es conveniente realizar un
N todas las apariciones libres de x en M
cambio de variable o colocacin de ndices. El

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

Suponiendo que z no es libre en M.


si y *' X ,z libreiN), Z libre(P).
Ejemplo
Ejemplo
Sea el trmino (Axy. *xy)yx.

Si no se renombran las variables y se


reemplazan las apariciones libres, se tendra
incorrectamente lo siguiente: = k.u "u se renombra por z
ya que no es libre
(AY. *yy)x ~ *xx (regla vi)" "regla v".

Mientras que renombrando las variables se


obtiene: Ejemplo

(AUV. *uv)yx ~ (AV. *yv)x


~*yx
(AUV. *uv)yx =f3 *yx

D. Igualdad beta
Ejemplo

Axioma fundamental de la igualdad beta:


Ax.X = fJ Ay.y
Axy.X = fJ Auy.U (?tx.M)N =f3{N/x}M

ya que x no es libre. de forma que (?tx.y)u =f3u y (?tx.y)u=f3Y

Reglas Dirigidas por Sintaxis pues (?tx.x)u =lu/x}x=u y (?tx.y)u ={ u/x }y=y

Sean P y Q subtrminos del cuerpo La igualdad Beta cumple las siguientes


M (M=PQ), en donde se hace la sustitucin N por propiedades:
x. Entonces:
Reflexividad: un trmino M es igual a s
(i)' {o/x}x = N rmsmo.

(ii) {o/x}y = y si y *' x.


Conmutatividad: si M es igual a N, entonces
Nes igual aM

(iii) {o/x~PQ) = {o/x}p{o/x}Q Transitividad: si M es igual a N y N es igual


a P, entonces M es igual a P
(iv) {O/XK.1x.p) = Ax.P "si x no es libre".
De las tres propiedades anteriores se concluye
que la igualdad beta define una relacin de
equivalencia.

________ INGENIERA E INVESTIGACIN 11'


I
Las propiedades anteriores se notan mediante =lAyz. {( Ax.X)/X}((xz) ryz)))( Ax.X)
las siguientes reglas:
( Ax.X)
= lAyz. ({ Ax.X)Z)ryz))( Ax.X)( Ax.X)
(i) M=f3 M
(regla de reflexividad) = IAvz.z(vz))(Ax__d]( Ax.X)
= lAzo Z({Ax.X)Z))( Ax.X)
(ii)
= IAz. zz)( Ax__d]
M=f3N = lAx.x)( Ax.X)
N=fJM = f3Ax.X
(regla de conmutatividad) =f31

"Si M= f3 N ' entonces N= f3 M" E. Reducciones

(iii) El clculo con trminos lambda hace uso del


axioma fundamental de la igualdad 13 y del axioma oc,
M=f3N N=f3P los cuales son llamados reduccin beta y conversin
M=f3P alfa respectivamente, los cuales se denotan as:

(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.

Verificar la siguiente igualdad: Slll=

(Axyz. (xz) (yz})111=(Axyz. (xz) (vz)) (Ax.X) (Ax.X) (Ax.X)


6. Ver teorema de Church-Rosser. En SETHI "Lenguajes
de Programacin -Funciones y Contructores-" Sethi. Pg.
444-445.

11~
_~~=.=.:...;;,,;;;..;;.;_..;.;;;;.;;...;~:...:...:..;_-
INGENIERA E INVESTIGACIN _
Ejemplo

Verificar LIl =::;'13J. DondeL= AxY.X e J=Ax.X.

L11 = (Axy.X )(Ax.X )(Ax.X )~(Ly.(Ax.X ))(Ax.X)~ Ax.x


f3 f3

NOTA: Se dice que una reduccin es sin final


cuando la reduccin contina de manera indefinida
sin encontrar una forma normal. Por ejemplo, las
reducciones que comienzan con (Ax.XX)(Ax.XX).

Estrategia de Reduccin

Existen dos estrategias de reduccin, la


invocacin por valor y la invocacin por nombre.
En el primer caso se elige la exred del extremo
izquierdo ms interna de un trmino. En cambio,
para las invocaciones por nombre se elige la exred
del extremo izquierdo ms externa. En este contexto,
"interna" y "externa" se refieren a la forma como
estn anidados los trminos.

Ejemplo

Reducir la siguiente expresin.

(Ax.xx)Ay.y)(k.z))

En el caso de la invocacin por valor, se tiene:

(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)

_________ INGENIERA E INVESTIGACIN 11=


.
Como se observa, la invocacin por valor
requiere menor nmero de reducciones f3 para BIBLIOGRAFA
alcanzar una forma normal, pero existe la posibilidad
de que en algunas expresiones se quede en un ciclo l. BARENDREGT, H. P. "Studies in logic. and the
foundations of mathematics - The Lambda
infinito. La reduccin por nombre o reduccin en Calculus ". Vol. 103. Amsterdam; North-Holland,
orden normal garantiza alcanzar una forma normal, 1984.
si existe. Comnmente, los lenguajes funcionales
utilizan la invocacin por valor, debido a que es 2. GUNTER, Carl A. "Sernantic of Programming
Languages - Structures and Techniques -", MIT
posible implantarla eficientemente. Press, 1992.

3. GLASER, Edward L. "Dictionary of Computing",


Oxford University Press. Oxford. 2a. Edicin.
1986.

4. SETHI, Ravi. "Lenguajes de Programacin. -


Conceptos y Constructores -". Adisson Wesley.
1992.

5. WIKSTRM, ke. "Functional Programming


Using Standard ML". Prentice Hall Intemational,
Cambridge, 1987.

6. <http://www.cs.not.ac. uk/DepartmentStaff/mpj/
faq.html>

11~ ~==~~-------------------
I INGENIERA E INVESTIGACIN

Das könnte Ihnen auch gefallen