Está en la página 1de 30

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE ELECTRÓNICA Y COMPUTACIÓN

TEAM DE EXPOSICION 

INTEGRANTES: Christhopper martinez

LISP
 Keneth guzman
Wiston areas
Jhonny martinez

DOCENTE:HILDA MARIA SAAVEDRA JIRÓN

FECHA:25\10\22… GRUPO:1-M-5 …. GRUPO DE


EXPOSICIÓN #10
INTRODUCION
A lo largo de la carrera hemos estudiado diversos
paradigmas de programación tales como:
Programación orientada a objetos
Programación lógica
Programación funcional
En esta presentación, Abordaremos uno de los
lenguajes que pertenecen al paradigma funcional, el
lenguaje lisp
QUE ES LISP ?

Lisp es uno de los lenguajes de programación más simples que existen.


Unos pocos conceptos, siete u ocho, abarcan todo el lenguaje. Hablamos
de la especificación base del lenguaje, naturalmente. Los distintos
dialectos han ido extendiendo el lenguaje y añadiendo nuevas
construcciones. Pero, y esto es tremendamente importante, lo han hecho
siempre utilizando esos mismos conceptos base. Eso implica que, una vez
conocidos los pocos conceptos que constituyen la base del lenguaje, el
lector será capaz de interpretar prácticamente cualquier programa Lisp.
CARACTERÍSTICAS PRINCIPALES DE
LISP
Principales Características
La característica principal de LISP es que todo
programa consiste de una función, otras
peculiares son :


● No posee asignaciones

● Su principal estructura de control es la
recursión

● Los programas y los datos son
equivalentes.

● Su principal estructura de datos es la
lista.

● La memoria es asignada por demanda.

Otra característica de Lisp son esos paréntesis que usa para todo. En Clojure, por ejemplo, podríamos
escribir:

1. (defn fib [n]


2. (if (< n 2)
3. 1
4. (+ (fib (- n 1)) (fib (- n 2)))))
5.
6. (let [tst (fn [n]
7. (print n (fib n))
8. (println))]
9. (map tst '(1 2 3 4 5)))
Números,
variables ,
átomos y listas
● Números. Lisp permite almacenar en la memoria de datos átomos de tipo numérico.
Esto incluye tanto números enteros (2, 4, 32222) como reales (2.0, 4.43, 3.2222). En
forma escrita, los átomos numéricos utilizan el léxico habitual de dígitos consecutivos,
utilizando un punto para denotar la coma decimal. En la figura 1 podemos ver dos
átomos numéricos: uno consiste en el número 1 y el otro en el número 2.

En LISP, cada variable está representada por un símbolo . El nombre de la variable es el


nombre del símbolo y se almacena en la celda de almacenamiento del símbolo.

Variables globales

Las variables globales tienen valores permanentes en todo el sistema LISP y permanecen
vigentes hasta que se especifica un nuevo valor.

Las variables globales generalmente se declaran usando la construcción defvar .


Por ejemplo
(defvar x 234)
(write x)
Cuando hace clic en el botón Ejecutar, o presiona Ctrl+E, LISP lo ejecuta
inmediatamente y el resultado devuelto es 234

Dado que no existe una declaración de tipo para las variables en LISP, especifica
directamente un valor para un símbolo con la construcción setq .

Por ejemplo
->(setq x 10)
La expresión anterior asigna el valor 10 a la variable x. Puede hacer referencia a la
variable usando el símbolo mismo como una expresión.
ÁTOMOS SIMBÓLICOS (S-ATOMS):
Un átomo simbólico es un átomo que representa algo más, como el nombre
de una función o el valor de una variable. Un átomo simbólico si no tiene
asignado un valor, al evaluarse devolverá una lista vacía. Las funciones como
set, setq y defun permiten asignarle valores a los átomos-S.
Los nombres de símbolos no distinguen entre mayúsculas y minúsculas, y
pueden ser cualquier secuencia de caracteres de notación y alfanuméricos a
excepción de los siguientes: ( ) . ' " ; .
Un nombre de símbolo no puede estar compuesto sólo por caracteres
numéricos ya que un número se representa a sí mismo y es por tanto una
constante. Lo mismo sucede con los nombres entrecomillados.
Operaciones
básicas con
listas
Operaciones básicas con listas
Operaciones básicas de las listas

Inserción de un nuevo elemento

push 'a lista) inserta en la cabeza de la lista

(cons 4 (1 2 3)) (NO MODIFICA LA LISTA)

(setf (second lista) 'mayra) reemplaza contenido de la lista

Concatenar y asignarlo a listas

(concatenate ’list ’(1 2 3) ’(4 5 6))

Concatenar listas

(nconc lista1 lista2) concatena lista poniendo el último apuntador de la lista 1 a la lista 2

(append list 1 list 2) Concatena la lista1 y la lista2.

Eliminar elementos de la lista

(remove 1 (1 2 3 4 5)) (NO MODIFICA LA LISTA)

(delete 4 (1 2 3 4 5)) (modifica lista)


Funciones
elementales
sobre listas y
constructores
de listas
\

Funciones elementales sobre las listas
LISP dispone de las siguientes funciones para manipular listas:

(CAR List) Retorna el primer elemento de la lista List.

(CDR List) Retorna la cola de la lista List. Por ejemplo: > (CAR `(1 2 3)) 1 > (CDR `(1 2 3)) (2 3)

Constructores de listas
Como las listas desempeñan un papel central en LISP, existen múltiples formas de
construir una lista: (APPEND List 1 List 2 … List n ) Esta función concatena las listas
List 1, List 2, …, List n. (CONS Elem List) Retorna una lista cuyo primer elemento es
Elem y cuya cola es List. (LIST Elem 1 Elem 2 … Elem n ) Esta función retorna una
lista formada por los elementos Elem 1, Elem 2, …, Elem n.
Funciones
aritméticas.
+, -, *, / : Son las operaciones para sumar, restar, multiplicar y dividir

Un ejemplo de uso es: (+ (* 2 3) 5)

1+, 1- : Incrementa/Decrementa en uno el valor. Es una operación unaria.

Un ejemplo de uso es: (1+ 9)

max, min : Devuelve el valor máximo de una lista

Un ejemplo de uso es: (max 23 4 5 234 654)

float: Devuelve el valor en coma flotante

Ejemplo de uso: (float (/ 22 7))

round: redondea un valor al entero más cercano

Ejemplo de uso: (round (/ 22 7))


expt: calcula potencias elevando su primer argumento a su segundo

Ejemplo de uso: (expt 2 3)

sqrt: calcula raices cuadradas

Ejemplo de uso: (sqrt 9)

abs: calcula el valor absoluto

Ejemplo de uso: (abs -3)

random: calcular un número aleatorio de 0 a N-1

Ejemplo de uso: (random '5)


Funciones de
lectura
escritura
print, format: son operaciones de salida de texto.

Ejemplo de uso: (format t "~%¡Hola!~%Estoy listo para empezar.")

read: es una operación de lectura de texto.

Ejemplo de uso: (setq dato-usuario (read))

read-line: absorbe caracteres hasta donde aparece un retorno de carro o un fin de archivo. Luego produce una
cadena con los caracteres que preceden el retorno de carro o el final del archivo, seguido de NIL, al menos que
read-line encuentre el final del archivos mientras está leyendo una línea, en ese caso es T.

Ejemplo de uso: (read-line)


Ejemplo de uso:
(with-open-file (flujo-de-pacientes "pacientes.lsp" :direction :input)
(dotimes (n 4) (print (read-line flujo-de-pacientes))))
Ejemplo de uso:
(setq a "line 1
line2")

(read-line (setq input-stream (make-string-input-stream a)))


Estructuras de
datos
(iteraciones).
Cuando deseamos programar algo repetitivo, algunas veces la iteración re�sulta más natural que la recursividad. El caso típico de
iteración consiste en

generar algún tipo de tabla. Ej.

1 > (defun cuadrados (inicio fin)

2 (do ((i inicio (+ i 1)))

3 ((> i fin) ’final)

4 (format t "~A ~A ~ %" i (* i i))))

5 CUADRADOS

6 > (cuadradros 2 5)

724

839

9 4 16

10 5 25

11 FINAL
La macro do es el operador fundamental de iteración en Lisp. Como let,

Puede crear variables y su primer argumento es una lista de especificación de variables. Cada elemento de esta lista toma la forma
(variable valor�inicial actualización). En cada iteración el valor de las variables definidas

de esta forma, cambia como lo especifica la actualización.

En el ejemplo anterior, do crea unicamente la variable local i. En la primer

iteración i tomará el valor de inicio y en las sucesivas iteraciones su valor

se incrementará en 1.

El segundo argumento de do debe ser una lista que incluya una o más expresiones. La primera expresión se usa como prueba para
determinar cuando debe parar la iteración. En el ejemplo, esta prueba es (> i fin). El resto de la lista será evaluado en orden cuando la
iteración termine. La última ex�presión evaluada será el valor de do, por lo que cuadrados, regresa siempre

el valor ’final
Funciones
read,quote , y
otras,
Función QUOTE: “ n QUOTE: “ ` ”

Sintaxis: (QUOTE Arg)

o simplemente puede abreviarse ’Arg

Esta función evita que se evalúe su argumento, y lo retorna intacto como resultado.
> (+ 1 2)
3
> (2 3 5)
ERROR: 2 no es una función

> `(+ 1 2) ( o (QUOTE (+ 1 2))

(+ 1 2)

> `(2 3 5)

(2 3 5)
Función EVAL

EVAL tiene el efecto contrario que la función QUOTE.

(EVAL Arg) fuerza una evaluación adicional de su


argumento Arg.

Ejemplo:

> (QUOTE (+ 2 2)) > (EVAL (QUOTE (+ 2 2))


(+ 2 2) 4
READ:
Read analiza la representación impresa de un objeto del flujo de entrada
y construye dicho objeto.
read-preserving-whitespace es como read pero conserva cualquier carácter
de espacio en blanco que delimita la representación impresa del objeto
read-preserving-whitespace es exactamente como read cuando el argumento
recursivo-p para read-preserving-whitespace es verdadero.

Cuando *read-suppress* es falso, read descarta el carácter delimitador


requerido por ciertas representaciones impresas si es un carácter de
espacio en blanco. pero read conserva el carácter (usando unread-char) si es
sintácticamente significativo, porque podría ser el comienzo de la siguiente
expresión.

Si un archivo termina en un símbolo o un número seguido inmediatamente por


un fin de archivo[1], read lee el símbolo o número con éxito; cuando se vuelve a
llamar, ve el final del archivo [1] y solo entonces actúa de acuerdo con
eof-error-p. Si un archivo contiene texto ignorable al final, como líneas en
blanco y comentarios, read no considera que termine en medio de un objeto.
VENTAJA Y
DESVENTAJAS
DE LISP
ventajas
l es flexible. maneja listas y árboles
con cierta facilidad y tiene
características funcionales. Autocad
utiliza un derivado llamado Autolisp.

Se puede razonar matemáticamente


lisp Compatibilidad con todos los
sistemas operativos Es
multiparadigma, es corto y sencillo.

Desventajas
Bastante lento Código feo y difícil de comprender

Poco uso comercial, no tan intuitivo


AREAS DE APLICACION
Además, los dialectos de Lisp son usados como lenguajes de scripting
en un número de aplicaciones, con los más conocidos
siendo Emacs Lisp en el editor de Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity.
COMO DIJO MI EX
HASTA AQUÍ
TERMINAMOS..

Nos vidrios


También podría gustarte