Para definir estas funciones, debe utilizar el boton 'Funciones' que se encuentra en la página principal.

· Concatenar dos listas:

concat: \xs.\ys. if (isnil xs) ys (list (head xs) (concat (tail xs) ys))!

· Calcular el factorial de un numero:

fact: \x. if (< x 2) 1 (* x (fact (- x 1)))!

· Calcular la longitud de una lista:

long: \xs. if (isnil xs) 0 (+ 1 (long (tail xs)))!

· Suma de todos los elementos de una lista.

suma: \xs. if (isnil xs) 0 (+ (head xs) (suma (tail xs)))!

· Invertir una lista.

flip: \xs. if (isnil xs) [ ] (concat (flip (tail xs)) [(head xs)] )!

· Tomar de una lista los 'n' primeros elementos de una lista.

take: \n.\xs. if (or (== n 0) (isnil xs)) [] (list (head xs) (take (- n 1) (tail xs)))!

· Filtrar de una lista aquellos elementos que cumplan una condición:

filter: \f.\xs. if (isnil xs) [ ] ( if (f (head xs)) (list (head xs) (filter f (tail xs))) (filter f (tail xs)) )!

· Aplicar una función a los elementos de una lista:

map: \f.\xs. if (isnil xs) [ ] (list (f (head xs)) (map f (tail xs)))!

· Obtener los 5 primeros naturales impares:

nat: list 1 (map (+ 1) nat)!

impares: take 5 (filter (\x. (<> 0 (mod x 2))) nat)!


Una Pequeña Limitación

Debido a que el navegador no permite que Java cree ficheros en la máquina local -para evitar el contagio de posibles virus-, no se ha podido implementar la opción de cargar y guardar archivos.

Para emular estas opciones, se han creado los botones 'Guardar' y 'Cargar' que se encuentran en el definidor de 'Funciones'. Cuando el usuario define una serie de fuciones, puede guardarlas pulsando el boton 'Guardar', entonces se abre una ventana de edición con el código generado por las funciones existentes, el usuario debera seleccionar ese código y copiarlo en el portapapeles; Posteriormente lo pegará en algún editor ascii del sistema -por ejemplo el Notepad en el caso de Windows- y así podrá guardar el texto.

Para recuperar un archivo primero ha de copiarse en el portapepeles desde algun editor ascii, luego se pulsará la opción 'Cargar' del editor de funciones y volverá a abrirse la ventana de copia y pegado, en la que el usuario pegará el texto y pulsará el boton 'Aceptar'. Las funciones seran compiladas y reemplazaran a las posibles funciones que se puediera tener anteriormente en el editor.

Se puede escribir un fichero de funciones directamente en un editor ascii y luego cargarlo con el procedimiento indicado, pero si se hace así no se detectaran errores en la carga. Lo aconsejable es utilizar el editor de 'Funciones' y realizar las inserciones y eliminaciones de funciones desde este.


El Siguiente listado lo puede Copiar y Pegar en la opcion 'Cargar' del editor de 'Funciones'.

concat: \xs.\ys.
if (isnil xs) ys
(list (head xs) (concat (tail xs) ys))!

fact: \x.
if (< x 2) 1 (* x (fact (- x 1)))!

long: \xs.
if (isnil xs) 0 (+ 1 (long (tail xs)))!

suma: \xs.
if (isnil xs) 0
(+ (head xs) (suma (tail xs)))!

flip: \xs.
if (isnil xs) [ ]
(concat (flip (tail xs)) [(head xs)] )!

take: \n.\xs.
if (or (== n 0) (isnil xs)) []
(list (head xs) (take (- n 1) (tail xs)))!

filter: \f.\xs.
if (isnil xs) [ ]
( if (f (head xs)) (list (head xs) (filter f (tail xs)))
(filter f (tail xs)) )!

map: \f.\xs.
if (isnil xs) [ ]
(list (f (head xs)) (map f (tail xs)))!

nat: list 1 (map (+ 1) nat)!


REGRESAR A LA PÁGINA PRINCIPAL