Está en la página 1de 4

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Alumno: Alberto Alvarez Martínez


Matricula: 1853272
Carrera: IAS
Hora: N3
Materia: Lab. De lenguaje de programación

C.U Niños Héroes, San Nicolas de los Garza, N.L


• ¿Características de los lenguajes funcionales?
Los programas escritos en un lenguaje funcional están constituidos únicamente
por definiciones de funciones, entendiendo estas no como subprogramas clásicos
de un lenguaje imperativo, sino como funciones puramente matemáticas, en las
que se verifican ciertas propiedades como la transparencia referencial (el
significado de una expresión depende únicamente del significado de sus
subexpresiones), y, por tanto, la carencia total de efectos colaterales.
Otras características propias de estos lenguajes son la no existencia de
asignaciones de variables y la falta de construcciones estructuradas como la
secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones
de instrucciones se lleven a cabo por medio de funciones recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y
los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales
híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de
los lenguajes imperativos, como las secuencias de instrucciones o la asignación
de variables. En contraste, los lenguajes funcionales puros tienen una mayor
potencia expresiva, conservando a la vez su transparencia referencial, algo que no
se cumple siempre con un lenguaje funcional híbrido.

• Completar la sig. tabla:


Lenguaje características Código-ejemplo
Haskell Las características más interesantes de Haskell
incluyen el soporte para tipos de datos y --Función recursiva que calcula el
funciones recursivas, listas, tuplas, guardas y encaje factorial de un número natural
de patrones. La combinación de estas puede resultar
en algunas funciones casi triviales cuya versión Factorial :: Integer -> Integer
en lenguajes imperativos pueden llegar a resultar
extremadamente tediosas de programar. Haskell es, factorial n
desde 2002, uno de los lenguajes funcionales sobre
los que más se ha investigado. Se han desarrollado | n < 0 = error "no existe el
muchas variantes: factorial para enteros negativos"

 Versiones paralelas del MIT y Glasgow,
| n == 0 = 1
ambas denominadas Parallel Haskell. | otherwise = n * factorial (n-1)
 Más versiones paralelas y distribuidas de
Haskell llamadas Distributed
Haskell (anteriormente Goffin) y Eden.
 Una versión con ejecución
especulativa: Eager Haskell.
 Varias versiones orientadas a
objetos: Haskell++, O'Haskell y Mondrian.
 Una versión educativa llamada Gofer
desarrollada por Mark Jones que fue
suplantada por Hugs (ver abajo).
Erlang Concurrente - Erlang tiene procesos -module(hello_world).
extremadamente livianos cuyos requerimientos de
memoria varían dinámicamente. Los procesos no -compile(export_all).
tienen memoria compartida y se comunican vía
mensajes asincrónicos. Soporta aplicaciones con
una gran cantidad de procesos concurrentes.
Distribuido - Erlang está diseñado para correr en
ambientes distribuidos. Una máquina virtual de hello() ->
Erlang es un nodo de Erlang. Un sistema distribuido
de Erlang es una red de nodos (generalmente uno io:format("hello world~n").
por procesador). Un nodo Erlang puede crear
procesos paralelos ejecutando en otros nodos, lo
cuales podrían utilizar otros sistemas operativos. Los
procesos que residen en diferentes nodos se
comunican exactamente de la misma forma que si
estuviesen en un nodo local.
Robustez - Erlang posee varias primitivas de
detección de errores las cuales sirven para
estructurar sistemas con Tolerancia frente a fallos.
Por ejemplo, los procesos pueden monitorear el
estado y las actividades de otros procesos, aun si se
ejecutan en otros nodos. Los procesos en un
sistema distribuidos pueden configurarse para
derivar en caso de falla a otros nodos y
automáticamente migrar hacia los nodos que se han
recuperado.
Soft real-time - Erlang soporta sistemas "soft" real-
time, el cual requiere tiempo de respuesta del orden
de los milisegundos. Las demoras introducidas por
las largas operaciones del garbage collector son
inaceptables, por eso Erlang utiliza tecnicas
incrementales en el proceso de garbage collection.
Actualización de código "en caliente" - Muchos
sistemas no pueden detenerse para hacer
mantenimiento de software. Erlang permite cambiar
el código mientras el sistema está ejecutando. El
viejo código puede ser desafectado y reemplazado
por el nuevo código. Durante la transición, el código
nuevo y el viejo puede coexistir. Es posible instalar
parches y evolutivos en un sistema funcionando sin
pertubar la operación normal del sistema.
Carga de código incremental - Los usuarios pueden
controlar en detalle cómo se carga el código. En
sistemas embebidos, todo el código se carga al
momento del arranque. En sistemas en desarrollo, el
código se carga cuando es necesario, aun cuando el
sistema está corriendo. Si al momento de pruebas
se descubren bugs, solo el código con fallas será
reemplazado.
Lisp A continuación, se detallan algunas de las (format t "¡Hola, mundo!")
características de las principales variantes del
lenguaje LISP:
LISP posee un manejo de memoria automático que
libera el espacio utilizado por los objetos que dejan
de ser necesitados.
Incluye un mecanismo bastante simple para utilizar
evaluación perezosa de expresiones.
LISP no posee un sistema de tipos estáticos como
puede ocurrir en c/c++. LISP asocia los tipos a los
valores en vez que, a las variables, por ello los
errores de mal uso de tipos solo puedan ser
detectados en tiempo de ejecución y no de
compilación.
Las implementaciones en LISP suelen programarse
de manera que cálculos iterativos puedan realizarse
en un espacio constante (en memoria) aunque
hayan sido descritos mediante el uso de la
recursividad.

Scheme La filosofía de Scheme es minimalista. Su objetivo ;HelloWorld.scm


no es acumular un gran número de funcionalidades,
sino evitar las debilidades y restricciones que hacen
necesaria su adicción. Así, Scheme proporciona el (begin
mínimo número posible de nociones primitivas,
construyendo todo lo demás a partir de un reducido (display "Hello, World!"
número de abstracciones. Por ejemplo, el
mecanismo principal para el control de flujo son las (newline))
llamadas recursivas finales.
Scheme fue el primer dialecto de Lisp que usó
ámbito estático o léxico en lugar de dinámico de
forma exclusiva. También fue uno de los primeros
lenguajes de programación con continuaciones
explícitas. Scheme ofrece también gestión
automática de memoria (recolección de basura).
Las listas son la estructura de datos básica del
lenguaje, que también ofrece arrays entre sus tipos
predefinidos. Debido a su especificación minimalista,
no hay sintaxis explícita para crear registros o
estructuras, o para programación orientada a
objetos, pero muchas implementaciones ofrecen
dichas funcionalidades. Scheme se llamaba
originalmente "Schemer", siguiendo la tradición de
los lenguajes Planner y Conniver. Su nombre actual
es debido a que sus autores usaban el sistema
operativo ITS, que limitaba la longitud de los
nombres de fichero a 6 caracteres.

También podría gustarte