EVAP-2 IIM3

List

Lisp
Información general
Apareció en
1958
Diseñado por
fuerte, dinámico
Implementaciones
múltiples
Dialectos
Ha influido a

Lisp (o LISP) es una familia de lenguajes de programación de computadorade tipo multiparadigma con una larga historia y una sintaxis completamente entre paréntesis.
Especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnológico de Massachusetts, Lisp es el segundo lenguaje de programación de alto nivel más viejo con un extenso uso hoy en día; solamente FORTRAN es más viejo.
Al igual que FORTRAN, Lisp ha cambiado mucho desde sus comienzos y han existido un gran número de dialectos en su historia. Hoy, los dialectos Lisp de propósito general más ampliamente conocidos son Common Lisp yScheme.
Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programación, Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador 
 Las listas encadenadas son una de las estructuras de datos importantes de Lisp, y el código fuente de Lisp en sí mismo está compuesto de listas. Como resultado, los programas Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programación de dominio específico empotrados en Lisp.
La intercambiabilidad del código y los datos también da a Lisp su instantáneamente reconocible sintaxis. Todo el código dauto contenido.
El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). el programa es escrito como expresiones S o listas entre paréntesis. Una llamada de función o una forma sintáctica es escrita como una lista, con la función o el nombre del operador en primer lugar, y los argumentos a continuación. Por ejemplo, una función f que toma tres argumentos puede ser llamada usando (f x y z).
Historia
Lisp fue inventado por John McCarthy en 1958 mientras estaba en el Instituto Tecnológico de Massachusetts (MIT). McCarthy publicó su diseño en 1960 en un artículo de Communications of the ACM titulado "funciones recurrentes de expresiones simbólicas y su cómputo por la máquina, parte I"1 (la "parte II" nunca fue publicada). Allí mostró que con algunos operadores simples y una notación para las funciones, uno puede construir un lenguaje turing completo para los algoritmos.
Desde 1955 ó 1956, el Information Processing Language fue el primer lenguaje de AI y ya había incluido muchos de los conceptos, tales como proceso por lista y recurrencia, que vinieron a ser usados en Lisp.
La notación original de McCarthy usaba "expresiones M" en corchetes que serían traducidas a expresiones S. Como un ejemplo, la expresión M car[cons[A,B]] es equivalente a la expresión S (car (cons A B)). Una vez Lisp fue implementado, los programadores rápidamente eligieron usar expresiones S y las expresiones M fueron abandonadas. las expresiones M emergieron otra vez con los intentos efímeros del MLISP2 de Horace Enea y el CGOL de Vaughan Pratt.
Lisp fue implementado primero por Steve Russel en un computador IBM 704. Russell había leído el artículo de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la función eval del Lisp podía ser implementada en código de máquina. El resultado fue un intérprete de Lisp funcional que podía ser usado para correr programas Lisp, o más correctamente, "evaluar expresiones Lisp".

C++ List estándar

Las listas (Lists) de C++ son secuencias de elementos almacenados en una lista encadenada. Comparadas con los vectores, estas permiten una mayor rapidez de inserción y borrado, pero una menor velocidad de acceso aleatorio. La plantilla list de C++ posee los métodos necesarios para insertar y borrar elementos al inicio, al final o en un punto específico de la lista. En orden de poder usar la plantilla list en nuestro programas debemos incluir la directiva (#include<list>) al inicio del código fuente.
Una simple calculadora
A manera de ejemplo, podemos pensar en una lista conteniendo datos númericos ingresados desde algun dispositivo, en el ejemplo dicho dispositivo será el teclado y los números ingresados se tratarán como reales (doubles). La idea es básica, ya que no se sabe de antemano cuantos serán los números ingresados para ser sumados usamos una lista dinámica por contener a cada uno de los números ingresados. Al final se suman los elementos ingresados y se muestra el resultado de la suma de los mismos.



// Un simple ejemplo de uso de la plantilla de clase list

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <list>

using namespace std;


int main(int argc, char *argv[])

{
    list<double> lalista;
    double num, suma=0;

    cout << "Una sencilla calculadora" << endl;


    do

    {
      cout << "Ingrese un número, 0 para salir: ";
      cin  >> num;
      if (num != 0) lalista.push_back(num);
    }
    while (num != 0);

    cout << "----------" << endl;


    while( !lalista.empty() )

    {
      num = lalista.front();
      cout << setw(10) << num << endl;
      suma += num;
      lalista.pop_front();
    }
    cout << "----------" << endl;

    cout << setw(10) << suma << endl;


    system("PAUSE");

    return EXIT_SUCCESS;
}


Lista de métodos
Tabla de métodos: clase list
assign
asignar elementos a la lista
back
regresa una referencia a el último componente de la lista
begin
regresa un iterator al principio de la lista
clear
remueve todos los componentes de la lista
empty
true si la lista está vacia
end
regresa un iterator al final de la lista
erase
remueve componentes de la lista
front
regresa una referencia al primer componente de la lista
insert
insertar componentes en la lista
max_size
regresa el número máximo de elementos soportados por la lista
merge
une dos listas
pop_back
remueve el último componente de la lista
pop_front
remueve el primer componente de la lista
push_back
agrega un componente al final de la lista
push_front
agrega un componente al frente de la lista
rbegin
regresa un reverse_iterator hacia el final de la lista
remove
remueve componentes de la lista
remove_if
remueve condicionalmente componentes de la lista
rend
regresa un reverse_iterator hacia el inicio de la lista
resize
cambia el tamaño de la lista
reverse
pone al revez los componentes de la lista
size
regresa el número de componentes en la lista
sort
clasifíca la lista

No hay comentarios:

Publicar un comentario