Vous êtes sur la page 1sur 7

UNIDAD 2 Introduccin Una funcin establece una relacin entre los argumentos y el resultado. y = f(x) x!= x * x-1!

1RA PARTE

La base terica de la programacin imperativa fue dada (en Inglaterra) por Alan Turing en los aos treinta. Tambin la teora de funciones como modelo de computacin proviene de los aos veinte y treinta Los fundadores son, entre otros, M. Schnfinkel (en Alemania y Rusia), Haskell Curry (en Inglaterra) y Alonzo Church (en los Estados Unidos). Fue en el comienzo de los aos cincuenta cuando a alguien se le ocurri usar esta teora efectivamente, como base de un lenguaje de programacin. El lenguaje Lisp de John McCarthy fue el primer lenguaje de Programacin Funcional y fue el nico por muchos aos

LISP es un lenguaje que se ha utilizado en: Aplicaciones robticas. De inteligencia artificial. Procesamiento de lenguaje natural. Demostracin de teoremas automtico. Y varias otras aplicaciones.

Las principales caractersticas de LISP son: Se requiere tan solo una expresin Un programa no tiene un estructura rgida Su principal estructura de control es la recursin La principal estructura de datos es la lista El cdigo de un programa en si es una lista Por lo que datos y cdigo podran ser uno mismo La memoria se asigna por demanda

Un programa en LISP puede ser una sola expresin. Una expresin puede ser un tomo o una lista (+ 4 5 6 7) (9) (print Hola Mundo) Funciones bsicas en LISP

(+ arg1 arg2 ... argn) (- arg1 arg2 ... argn) (* arg1 arg2 ... argn) (/ arg1 arg2 ... argn) (1+ arg1) arg1) (quote arg1)

Tipos de datos Los datos en LISP son tomos simblicos, numricos o de caracteres: arbol 3 4.5 Hola Mundo T Nil (quote cachorro) El otro tipo de datos es la lista (4 5 6 4 3 2) (X F Y H E) ( (a 34)(b 21)(c 32)(43 23) u) (43 (9 3) (a b d c) (2 (s e)) 32 u) (9 hello 92 (3 ( 32 s ( s d) 32) 2) 8) (quote ( )) (quote (limon naranja manzana)) Aunque el uso de variables podra ser en muchos casos innecesario, es otros tanto es imprescindible su utilizacin. Una variable se declara al definirse y puede cambiar su tipo de dato de forma dinmica, el recolector de basura se encarga de gestionar cuando un dato deja de ser referenciado por una variable.

LISP tiene un gran repertorio de funciones, desde las aritmticas hasta las de manejo de listas pasando por I/O. Cada funcin tiene argumento(s) y retorna un valor en algunos casos T para representar verdadero nil para representar falso o algn valor especfico. Funciones relacionales logicas

Funciones predicados

Funciones matematicas

Funciones para el manejo de listas

UNIDAD 2 Funciones diversas

2DA PARTE

Tambin el programador puede definir sus propias funciones: (DEFUN nom-funcion ([args]) (expresin1) : : (expresin n) ) Funcin para obtener el rea de un circulo que se le pasa el radio. (defun area-circulo (radio) (* pi (* radio radio)) ) (area-circulo 45) Funciones condicionales (cond ((condicionante1) (exp1)..(expn)) ((condicionante2) (exp1)..(expn)) : (t (exp1)..(expn)) ) (cond ((> 14 5) (+ 1 2)) ((atom a) (+ 2 3)) (t Error) ) Funciones condicionales (if exp-cond exp1 exp2) (if (> 9 3) (+ 3 4) error) Funciones condicionales (when exp-cond exp1 exp2 .. expn) (when 9 (+ 3 4)) (when (atom a) (+ 3 4) (- 4 5)) Funciones condicionales (unless exp-cond exp1 exp2 .. expn) (unless () (+ 3 4)) (unless (atom c) (+ 4 3)) Funciones condicionales (case exp-eval ( exp-val1 exp1 exp2 exp3 expn) ( exp-val2 exp1 exp2 exp3 expn) : (T exp1 exp2 exp3 expn)) * Otherwise se puede utilizar en lugar de T Funciones condicionales (case mi-var (1 (+ 4 5)) (2 (* 4 5)) (3 (/ 4 5.0)) (4 (- 4 5)) (t error) )

Funciones para construir listas La funcin cons crea una nueva lista donde el primer elemento es el resultado de una expresin y el resto de la lista es una lista (cons exp lista) (cons (+ 4 3) (a b c d)) (cons a (1 2 3 4)) Funciones para construir listas La funcin list crea una nueva lista a partir de las expresiones pasadas como argumentos (list exp1 exp2 exp3 .. expn) (list 1 2 3 4 5) (list a (1 a d 4) (+ 4 5)) Funciones para construir listas La funcin list* crea una nueva lista a partir de las expresiones pasadas como argumentosa agregados a la lista (list* exp1 exp2 exp3 .. expn lista) (list* 1 2 3 4 5 (8 9)) (list* a (1 a d 4) (+ 4 5)) Funciones para construir listas La funcin make-list crea una nueva lista con n elementos nil o valor designado (make-list n) (make-list n :initial-element exp) (make-list 2) (make-list 5 :initial-element 0) Funciones para construir listas La funcin append crea una nueva lista concatenando las listas como argumentos (append l1 l2 l3 .. ln) (append (8 3) (d (9 3)) (a b d)) Funciones para construir listas La funcin subst obtiene una lista sustituyendo elementos sa por elementos sn (subst sn sa lista) (subst (x y) 3 (8 3 9 3)) Funciones para construir listas La funcin remove obtiene una lista donde se han eliminado las instancias de primer nivel de exp. (remove exp lista) (remove 3 (8 3 9 3)) Funciones para construir listas La funcin butlast obtiene una lista sin los n ltimos elementos (butlast lista n) (butlast (8 3 9 3) 2) Funciones para construir listas La funcin reverse obtiene una lista con los elementos invertidos en el primer nivel (reverse lista) (reverse (8 3 (a d) 9 (f r) 3) )

Recursin Como ya se menciono antes la recursin es el mecanismo de flujo de control por excelencia en LISP. Se dice que una funcin es recursiva cuando al menos existe una referencia as misma dentro de ella misma. La funcin de factorial es el ejemplo ms tpico de una funcin recursiva ya que su definicin matemtica es: X! = X * (X-1)! 0! = 1 En lisp tendremos lo siguiente: (defun factorial (x) (if (= x 0) 1(* x (factorial (- x 1))) ) ) UNIDAD 2 3RA PARTE

Una asociacin permite recuperar datos de la forma llave valor. (setq l ((a 9)(b 4)(c 4)(d 4)(e 8))) Si tengo una lista de pares ordenados donde el primero es una clave se puede recuperar su valor o valores utilizando la funcin assoc (assoc exp lista) (assoc c l) Los arreglos son soportados por LISP La funcin make-array permite definir arreglos. (make-array dimensin) (make-array dimensin :initial-contents exp) (make-array dimensin :initial-element exp) (setq a1 (make-array (7))) Funciones para manipular arreglos (aref arreglo indice1.. Indicen) Modificacin: (setf (aref arreglo indices) exp) Para obtener las dimensiones de un arreglo (array-dimensions arreglo) Funciones iterativas: (loop exp1 exp2 .. expn ) (do (inicializacion variables) (condicional exp1expn) (expE1) (expE2) : (expEn) ) Funciones de iteracin (dotimes (variable limite expResultado) (exp1) (exp2) : (expn) )

Una estructura es una coleccin de datos encapsulada. (defstruct identificador propiedad1 valor1 : propiedadn valorn ) Ejemplo de estructura persona (defstruct persona nombre nil edad nil ciudad orizaba telefono nil ) Para manipular la estructura se pueden utilizar las siguientes funciones: Para crear un objeto (make-estructura :atributo valor) (setf ejemplar1 (make-persona :nombre juan :edad 23 :telefono 725636)) Para recuperar la propiedad de un ejemplar: (estructura-propiedad ejemplar) (persona-nombre ejemplar1) Para modificar el valor de una propiedad de un ejemplar (setf (estructura-propiedad ejemplar) exp) (setf (persona-edad ejemplar1) 34) Un ejemplar es una referencia por lo que: (setf ejemplar2 ejemplar1) Son dos referencias al mismo objeto Para copiar un ejemplar en otro objeto (seft ejemplar3 (copy-persona ejemplar1))

Vous aimerez peut-être aussi