8
Génesis y principios de Haskell. Los lenguajes de programación funcionales tienen una larga historia, comenzando con la invención de John McCarthy de Lisp en finales de 1950. En la década de 1960, Peter Landin y Christopher Strachey identificaron la importancia fundamental del cálculo de lambda para lenguajes de programación modelado y perezoso, la semántica operacional y la semántica denotativa. A principios de los años 70, Rod Burstall y John Darlington estaban haciendo la transformación de programas de primer orden funcional lenguaje con definición de función por la coincidencia de patrones. Durante el mismo período, David Turner, un estudiante de Strachey, desarrolló SASL, un lenguaje puro funcional de orden superior con variables de alcance léxico del cálculo lambda. Gerry Sussman y Guy Steele desarrollaron Scheme, un dialecto de Lisp implementando el léxico, Robin Milner invento ML como un metalenguaje para la LCF demostrador de teoremas a Edinburgh. Tanto Scheme y ML fueron lenguajes estrictos y a pesar de que contenían características imperativas, que hicieron mucho para promover el estilo de programación funcional, en particular, el uso de funciones de orden superior. Luego, a finales de los años 70 y principios de los 80, algo nuevo sucedió. La serie de publicaciones encendió una explosión de interés en la idea de perezoso (o no estricto) los lenguajes funcionales como un vehículo para la escritura de programas serios. La evaluación perezosa parece que f ue inventada independientemente en tres ocasiones. David Turner introdujo una serie de las lenguas influyentes: SASL, que fue diseñado inicialmente como un lenguaje estricto en 1972, pero se hizo perezosa en 1976, Turner mostró la elegancia de la programación con evaluación perezosa, y en particular el uso listas de perezosas para emular muchos tipos de comportamientos . Al mismo tiempo, hubo un esfuerzo simbiótico en nuevos y emocionantes formas para implementar lenguajes perezosos. En particular: En el software, una variedad de técnicas basadas en la reducción de grafos se están estudiando, y en particular de Turner y su inspiracional uso elegante de los combinadores SK. En agosto de 1987, Cam Richards de la Universidad de Texas, David Turner organizó una escuela internacional en Programación declarativa en Austin, Texas, como parte del "Año de la programación". Una parte importante de la escuela era por supuesto la programación funcional perezosa. Todo esto llevó a una tremenda sensación de emoción. La sencillez y la elegancia de la programación funcional cautivaron a los presentes autores y muchos otros investigadores con ellos. Evaluación perezosa con su conexión directa a la pura, llamada cálculo de Lambda, que brindaba la posibilidad extraordinaria de la representación y manipulación de estructuras de datos infinitas. Como resultado de toda esta actividad, a mediados de la década de 1980 hubo un número de investigadores, incluyendo los autores, que estaban profundamente interesados en diseño y técnicas de implementación de lenguajes puros perezosos. Los lenguajes que contribuyeron a la perezosa Torre de Babel son: Miranda, un sucesor de SASL y KRC, diseñado e implementado por David Turner. Lazy ML (LML), fue pionera en Chalmers por Augustsson y Johnsson, y se recopiló en el University College de Londres por Peyton Jones. Orwell, un lenguaje vago desarrollado por Wadler, influenciado por KRC y Miranda, y el OL, una variante posterior de Orwell. Alfl, diseñado por Hudak, cuyo grupo en Yale desarrollo un intérprete basado combinador para Alfl. Id, un lenguaje de flujo de datos no estricto desarrollado en el MIT por Arvind y Nikhil. Clean, un lenguaje vago basado explícitamente en la reducción de grafos, desarrollado en Nijmegen por Rinus Plasmeijer y sus colegas. Ponder, un lenguaje diseñado por Jon Fairbairn, con un impredicativo de mayor rango sistema de tipos y alcance léxico de tipo variable que se utilizan para escribir un sistema operativo para SKIM. Daisy, un dialecto de Lisp perezoso, desarrollado en Indiana por Cordelia Hall, John O'Donnell y sus colegas En este momento, tanto en las comunidades Scheme y ML habían desarrollado sus propias normas.

Génesis y Principios de Haskell

Embed Size (px)

Citation preview

  • 5/26/2018 G nesis y Principios de Haskell

    1/8

    Gnesis y principios de Haskell.

    Los lenguajes de programacin funcionales tienen una larga historia, comenzando con la invencin de John

    McCarthy de Lisp en finales de 1950.

    En la dcada de 1960, Peter Landin y Christopher Strachey identificaron la importancia fundamental del

    clculo de lambda para lenguajes de programacin modelado y perezoso, la semntica operacional y la

    semntica denotativa.

    A principios de los aos 70, Rod Burstall y John Darlington estaban haciendo la transformacin de programas

    de primer orden funcional lenguaje con definicin de funcin por la coincidencia de patrones. Durante el

    mismo perodo, David Turner, un estudiante de Strachey, desarroll SASL, un lenguaje puro funcional de

    orden superior con variables de alcance lxico del clculo lambda.

    Gerry Sussman y Guy Steele desarrollaron Scheme, un dialecto de Lisp implementando el lxico, Robin

    Milner invento ML como un metalenguaje para la LCF demostrador de teoremas a Edinburgh. Tanto Scheme

    y ML fueron lenguajes estrictos y a pesar de que contenan caractersticas imperativas, que hicieron mucho

    para promover el estilo de programacin funcional, en particular, el uso de funciones de orden superior.

    Luego, a finales de los aos 70 y principios de los 80, algo nuevo sucedi. La serie de publicaciones encendi

    una explosin de inters en la idea de perezoso (o no estricto) los lenguajes funcionales como un vehculo

    para la escritura de programas serios. La evaluacin perezosa parece que fue inventada

    independientemente en tres ocasiones.David Turner introdujo una serie de las lenguas influyentes: SASL, que fue diseado inicialmente como un

    lenguaje estricto en 1972, pero se hizo perezosa en 1976, Turner mostr la elegancia de la programacin

    con evaluacin perezosa, y en particular el uso listas de perezosas para emular muchos tipos de

    comportamientos . Al mismo tiempo, hubo un esfuerzo simbitico en nuevos y emocionantes formas

    para implementar lenguajes perezosos. En particular: En el software, una variedad de tcnicas basadas en

    la reduccin de grafos se estn estudiando, y en particular de Turner y su inspiracional uso elegante de los

    combinadores SK.

    En agosto de 1987, Cam Richards de la Universidad de Texas, David Turner organiz una escuela

    internacional en Programacin declarativa en Austin, Texas, como parte del "Ao de la programacin". Una

    parte importante de la escuela era por supuesto la programacin funcional perezosa. Todo esto llev a una

    tremenda sensacin de emocin. La sencillez y la elegancia de la programacin funcional cautivaron a los

    presentes autores y muchos otros investigadores con ellos. Evaluacin perezosa con su conexin directa a la

    pura, llamada clculo de Lambda, que brindaba la posibilidad extraordinaria de la representacin y

    manipulacin de estructuras de datos infinitas.

    Como resultado de toda esta actividad, a mediados de la dcada de 1980 hubo un nmero de

    investigadores, incluyendo los autores, que estaban profundamente interesados en diseo y tcnicas de

    implementacin de lenguajes puros perezosos.

    Los lenguajes que contribuyeron a la perezosa Torre de Babel son:

    Miranda, un sucesor de SASL y KRC, diseado e implementado por David Turner.

    Lazy ML (LML), fue pionera en Chalmers por Augustsson y Johnsson, y se recopil en el University College de

    Londres por Peyton Jones.

    Orwell, un lenguaje vago desarrollado por Wadler, influenciado por KRC y Miranda, y el OL, una variante

    posterior de Orwell.

    Alfl, diseado por Hudak, cuyo grupo en Yale desarrollo un intrprete basado combinador para Alfl.

    Id, un lenguaje de flujo de datos no estricto desarrollado en el MIT por Arvind y Nikhil.

    Clean, un lenguaje vago basado explcitamente en la reduccin de grafos, desarrollado en Nijmegen por

    Rinus Plasmeijer y sus colegas.

    Ponder, un lenguaje diseado por Jon Fairbairn, con un impredicativo de mayor rango sistema de tipos y

    alcance lxico de tipo variable que se utilizan para escribir un sistema operativo para SKIM.

    Daisy, un dialecto de Lisp perezoso, desarrollado en Indiana por Cordelia Hall, John O'Donnell y sus colegas

    En este momento, tanto en las comunidades Scheme y ML haban desarrollado sus propias normas.

  • 5/26/2018 G nesis y Principios de Haskell

    2/8

    Para 1987 Peyton Jones se detuvo en Yale para ver Hudak en su camino hacia el FPCA en Portland,

    Oregn. Despus de discutir la situacin, Peyton Jones y Hudak decidieron iniciar una reunin durante la

    FPCA, para atraer el inters de la firma de un nuevo lenguaje funcional, comn. Wadler tambin se detuvo

    en Yale en el camino a FPCA, y tambin hizo suya la idea de una reunin. As la reunin FPCA marc el inicio

    de Haskell de proceso de diseo, aunque no tenan un nombre para el idioma y produjeron algunas

    discusiones tcnicas o decisiones de diseo. De hecho, un punto clave que sali de esa reunin fue que la

    forma ms fcil avanzar era comenzar con un lenguaje actual y evolucionar en cualquier direccin que los

    dejara satisfechos. De todas las lenguas perezosas bajo desarrollo, Miranda de David Turner era, por mucho,

    el ms maduro, era puro, bien diseado, cumpla muchas de sus finalidades. Turner no estaba presente en la

    reunin, por lo que llegaron a la conclusin de que el primer punto de accin del comit sera pedir a Turner

    si les permitira adoptar Miranda como el punto de partida para el nuevo idioma.

    Despus de un intercambio breve y cordial, Turner se neg. Sus objetivos eran diferentes de las

    suyos. Queran un lenguaje que podra ser utilizado, entre otros fines, para la investigacin de las

    caractersticas del lenguaje, en particular, se busc la libertad para que cualquiera pueda ampliar o

    modificar el lenguaje, y para crear y distribuir una aplicacin.

    En lugar de partir de una base bien desarrollada, les permiti la libertad de contemplar de forma ms radical

    muchos aspectos del diseo del lenguaje.

    La primera reunin fsica, se celebr en la Universidad de Yale en 1988, donde Hudak fue ProfesorAsociado. La primera orden fue establecer las siguientes metas para el lenguaje:

    1. Debe ser adecuado para la enseanza, la investigacin y las aplicaciones, incluyendo la construccin de

    grandes sistemas.

    2. Debe ser completamente descrito a travs de la publicacin de una sintaxis formal y semntica formal.

    3. Debe ser de libre acceso. Cualquier persona debe permitir poner en prctica el idioma y distribuirlo a

    quien ellos gusten.

    4. Debe ser utilizable como base para la investigacin de un nuevo lenguaje.

    5. Debe basarse en las ideas que gozan de un amplio consenso.

    6. Se debe reducir la diversidad innecesaria en programacin de lenguajes funcional ming.

    Los dos ltimos objetivos reflejan el hecho de que tenan la intencin de la lengua a ser bastante

    conservadora, en lugar de abrir nuevos caminos. Aunque result bastante diferente, tenan la intencin de

    hacer poco ms de encarnar el consenso actual de las ideas y para unir sus diferencias, detrs de un solo

    diseo.

    Elegir un nombre fue importante, ya que un pequeo pero importante momento en la evolucin de

    cualquier lenguaje es el momento en que es nombrado. En la reunin de Yale se utiliz el siguiente proceso

    para elegir el nombre.

    Cualquier persona puede proponer uno o ms nombres de la lengua, que fueron escritos en una pizarra. Al

    final de este proceso, la siguientes nombres aparecan: Semla, Haskell, Vivaldi, Mozart, CFL, Funl 88, semlor,

    Vela, Diversin, David, Niza, Luz, ML Nouveau, Mirabelle, Concord, LL, Delgado, Meet, Leval, Curry, Frege,

    Peano, Facilidad, Portland, y Haskell B Curry. Despus cada persona era libre entonces para tachar un

    nombre que no le gustaba. Cuando terminaron, haba un nombre a la izquierda. Ese nombre fue "Curry", en

    honor al matemtico y logico Haskell B.

    Despus de algunos debates, qued asentado "Haskell" como el nombre para el nuevo idioma.

    Se pidi a Hudak y Wise escribir a la viuda de Curry, Virginia Curry, para preguntarle si le importara nuestra

    refiere al lenguaje despus de su esposo. Hudak tarde visit a la Sra. Curry en su casa y escuch de historias

    de personas que haban estado all, ella fue muy amable. Su despedida fue "Sabes, Haskell realidad nunca le

    gust el nombre Haskell."

    Las reuniones Glasgow continuaron fervientemente despus de la Reunin de Yale, esa reunin se celebr

    abril 6 a 9, 1988 en la Universidad de Glasgow, cuyo grupo de programacin funcional fue comenzando un

    perodo de rpido crecimiento. Fue en esta reunin que se tomaron muchas decisiones clave. Tambin se

    acord en esta reunin que Hudak y Wadler seran los editores de la primera Memoria de Haskell.

  • 5/26/2018 G nesis y Principios de Haskell

    3/8

    Agosto de 1991. El 1.1 Versin del Haskell fue publicado (153 pginas), editadas por Hudak, Peyton Jones y

    Wadler.

    Marzo de 1992. La versin Haskell 1.2 Informe se public (164mpginas), editadas por Hudak, Peyton Jones

    y Wadler, introduccin slo cambios menores en Haskell 1.1. Dos meses ms tarde, en Mayo 1992, que

    apareci en avisos SIGPLAN, acompaado por una "suave introduccin a Haskell", escrito por Hudak y Fasel.

    SIGPLAN, Stu Feldman y el editor de Avisos Dick Wexelblat, brind a Haskell tanto la visibilidad y

    credibilidad.

    1994. Haskell gan presencia en Internet cuando John Peterson registro el nombre de dominio haskell.org y

    configuro un servidor y sitio web en Yale.

    Mayo de 1996. La versin Haskell 1.3 Informe fue publicado, editado por Hammond y Peterson. En cuanto a

    los cambios tcnicos, Haskell 1.3 fue la versin ms importante de Haskell despus 1.0.

    Abril de 1997. Se public el Informe de la versin Haskell 1.4 (139+ 73 pginas), editado por Peterson y

    Hammond.

    En 1998 Informe Haskell: Lengua y Bibliotecas fue publicado (150 + 89 pginas), editadas por Peyton Jones y

    Hughes, las listas por comprensin volvieron a slo listas.

    En 1999, el Comit Haskell dej de existir.

    Peyton Jones tom en la suela editorial, con la intencin de recoleccin y fijacin de los errores

    tipogrficos. Las decisiones no eran ya limitadas a un pequeo comit.Diciembre de 2002 Haskell Informe Revisado, se public (260 pginas), editadas por Peyton Jones.

    Cambridge University Press public generosamente el Informe como un libro. Su flexibilidad de acordar la

    publicacin de un libro en los trminos poco usuales era extraordinariamente til para la comunidad Haskell.

    La primera edicin del Informe Haskell fue publicado el 1 de abril, 1990. Fue sobre todo un accidente que

    apareci en Da de los inocentes, el lanzamiento fue lo suficientemente cerca para para justificar el uso de

    esa fecha. Por supuesto Haskell no era una broma, pero la liberacin se ha traducido en una serie de chistes

    posteriores al dia de los Inocentes de abril.

    Hudak como editor del Informe, el 1 de abril de un ao o dos ms tarde, envi un mensaje de correo

    electrnico al Comit Haskell diciendo que todo era demasiado para l, y que l no slo renunciaba a la

    comisin, que era tambin dejar de Yale para seguir una carrera en la msica. Muchos miembros del comit

    y David Wise inmediatamente llamaron a Hudak para rogarle que reconsidere su decisin. Por supuesto que

    era slo una broma del Da de los Inocentes.

    Pereza fue sin duda el nico tema que uni a los distintos grupos que contribuyeron al diseo de

    Haskell. Tcnicamente, Haskell es un lenguaje con un no-semntica estricto; evaluacin perezosa es

    simplemente una tcnica de implantacin de un lenguaje no estricto.

    La pereza tiene sus costos. Llamada por necesidad suele ser menos eficiente que llamada por valor, a causa

    de la contabilidad extra que se requiere para retrasar se requiere evaluacin hasta un plazo, por lo que

    algunos trminos pueden no ser evaluado y sobrescribir un trmino con su valor, por lo que ningn trmino

    es evaluado dos veces. Este coste es un factor significativo, pero constante, y se entenda en el momento

    Haskell fue diseado.

    Un problema mucho ms importante es la siguiente: es muy difcil, incluso para programadores con

    experiencia para predecir el comportamiento de los espacios de perezoso programas, y no puede ser mucho

    ms que un factor constante en juego.

    Una consecuencia inmediata de la pereza es que el orden de evaluacin es impulsado por la

    demanda. Como resultado, se hace ms o menos imposible realizar de forma fiable de entrada / salida o de

    otros efectos secundarios como el resultado de una llamada a la funcin. Haskell es, por lo tanto,

    un lenguaje puro.

    La pureza es una gran apuesta, con consecuencias generalizadas. Lado sin restricciones efectos son, sin

    duda, muy convenientes.

    El mayor beneficio de la pereza no es la pereza per se, sino ms bien que la pereza lo mantuvo puro, y

    motivados por lo tanto una gran cantidad de trabajo productivo en mnadas y estado encapsulado.

  • 5/26/2018 G nesis y Principios de Haskell

    4/8

    Inicialmente, las clases de tipo estaban motivados por el problema de la estrecha sobrecarga de operadores

    numricos y la igualdad.

    La introduccin de la nocin de una clase de tipos que posea un conjunto dado de operaciones (como

    operaciones numricas o la igualdad).

    La solucin de clase de tipo era atractivo para ellos, ya que pareca ms principios, sistemtica y modular

    que cualquiera de las alternativas, de modo que, a pesar de su naturaleza ms radical y no probado, que fue

    adoptada por aclamacin. Y nacieron las clases de tipo! El estudiante de Wadler, Steven Blott ayud a

    formular las reglas de tipo.

    Haskell no tiene semntica formal. En particular, la ausencia de una definicin de lenguaje formal no deje

    que el lenguaje se desarrolle con mayor facilidad, porque los costos de productoras especificaciones

    totalmente formales de cualquier cambio propuesto son pesados, y por s mismos desalentan cambios.

    Haskell es un lenguaje diseado por el comit, sin embargo, como resulta ser, con todas sus deficiencias es a

    menudo descrito como "hermoso" o "elegante", incluso "cool".

    Una fuente importante de tensin tanto dentro como entre los miembros del comit fue la competencia

    entre belleza y utilidad. Queran disear un sencillo y elegante lenguaje, por otro lado, tambin Haskell

    quera ser una lengua til, tanto para la enseanza y verdaderas aplicaciones.

    El objetivo de usar Haskell para la investigacin exige la evolucin, mientras que utilizando el lenguaje de la

    enseanza y las aplicaciones requieren estabilidad. Al principio, el nfasis estaba firmemente en laevolucin, En respuesta a esta presin, el comit desarroll un simple y solucin obvia: simplemente

    nombramos un caso particular del lenguaje "Haskell 98," y los implementadores de lenguaje comprometidos

    a continuar apoyando a Haskell 98 indefinidamente. Considerban Haskell 98 como un diseo bastante

    conservador.

    "Haskell 98" es una variante estable de la lengua.

    En el momento que Haskell naci, el lenguaje ms usado, ms maduro y ampliamente, funcional no estricto

    fue Miranda. Miranda era un producto de la compaa de David Turner, Investigacin Software Limited, que

    fund en 1983. Turner concebido Miranda para llevar la programacin funcional perezosa, el diseo de

    Haskell fue, por lo tanto, fuertemente influenciada por Miranda.

    En ese momento, Miranda fue la mxima expresin de un no estricta, lenguaje puramente funcional con un

    sistema de tipos Hindley-Milner y tipos de datos y algebraicas que era precisamente el tipo de lenguaje

    Haskell que aspiraba a ser. Como resultado, hay muchas similitudes entre los dos lenguajes, tanto en su

    enfoque bsico (pureza, de orden superior, la pereza, la tipificacin esttica) y en su aspecto sintctico y

    sentir.

    Hoy en da, Miranda ha sido prcticamente desplazado por Haskell. Una indicacin de ello es la publicacin

    de los libros de texto: mientras que los libros de Haskell siguen apareciendo con regularidad, el ltimo libro

    de texto en ingls para usar Miranda fue publicado en 1995.

  • 5/26/2018 G nesis y Principios de Haskell

    5/8

    Historia de Lisp.

    Este documento se concentra en el desarrollo de las ideas bsicas y en periodos del verano de 1956 y 1958,

    cuando la mayor parte de ideas clave se desarrollaron (algunos de los cuales se ejecutaron en el FORTRAN

    basado FLPL y Fall, de 1958 hasta 1962, cuando el lenguaje de programacin fue desarrollada y aplicada a los

    problemas de la inteligencia artificial.

    Despus de 1962, el desarrollo de LISP convirti multifilar, y diferentes ideas han sido retomadas en

    diferentes lugares. Como un lenguaje de programacin, LISP se caracteriza por las siguientes ideas en

    computacin con expresiones simblicas en lugar de nmeros, la representacin de expresiones simblicas

    y otra informacin de estructura de lista en la memoria de un ordenador, la representacin de la

    informacin en los medios de comunicacin externos principalmente por listas de varios niveles y, a veces

    por expresiones S, un pequeo conjunto de selector y operaciones de constructor expresan como funciones,

    composicin de funciones como una herramienta para la formacin de funciones ms complejas, el uso de

    las expresiones condicionales para conseguir la ramificacin en la definicin de funciones, el uso recurrente

    de condicional expresiones como una herramienta suficiente para la construccin de las funcionescomputables, el uso de expresiones- para las funciones de asignacin de nombres, la representacin de los

    programas LISP como datos LISP, la interpretacin de la expresin condicional conectivas booleanas, la

    funcin eval LISP que sirve a la vez como una definicin formal de la lengua y como un intrprete, y la

    recoleccin de basura como un medio de manejo de la problema de borrado. Las declaraciones LISP tambin

    se utilizan como un lenguaje de comandos, cuando se utiliza LISP en un entorno de tiempo compartido.

    Algunas de estas ideas fueron tomadas de otros lenguajes. Hacia el final del perodo inicial, se hizo evidente

    que esta combinacin de ideas realizado un sistema matemtico elegante.

    Los resultados de Cartwright y McCarthy, 1978, que muestran que los programas LISP pueden interpretarse

    como frases y esquemas de la lgica de primer orden, proporcionar nueva confirmacin de la intuicin

    original que la pulcritud lgico seran rentable.

    El deseo de un lenguaje algebraico procesamiento de listas para la inteligencia artificial, se present en el

    verano de 1956 durante el Proyecto de Investigacin de Verano de Dartmouth sobre la inteligencia artificial,

    que era el primer estudio organizado de la IA. Durante esta reunin, Newell, Shaw y Simon descrito IPL 2, un

    lenguaje de procesamiento de lista para la Rand Corporation JOHN-Equipo CANI en que implementaron su

    programa de lgica Terico.

    Hubo poca tentacin de copiar IPL, debido a que su forma se basa en un JOHNNIAC cargador que pas a

    estar disponible para ellos, y porque FORTRAN idea de los programas de escritura algebraica era

    atractivo. Fue inmediatamente evidente que las sub expresiones arbitrarias de expresiones simblicas

    podra ser obtenido mediante la composicin de las funciones que extraen inmediata Sub expresiones, y

    esto pareca razn suficiente para ir a un lenguaje algebraico.

    Haba dos motivaciones para el desarrollo de un lenguaje para la IBM 704.

    En primer lugar, IBM fue generosamente estableciendo un Centro de Computacin de Nueva Inglaterra en el

    MIT que Dartmouth sera utilizar. En segundo lugar, IBM estaba llevando a cabo para desarrollar un

    programa para demostrar teoremas en geometra plana (sobre la base de una idea de Marvin Minsky), y

    estaba para servir como asesor de ese proyecto.

    En ese momento, IBM pareca una buena apuesta para perseguir la inteligencia artificial investigar

    vigorosamente y se esperaban otros proyectos. FORTRAN de IBM llevara a un lenguaje en el cual

    procesamiento de listas convenientemente podra llevarse a cabo o si un nuevo idioma sera necesario. Sin

    embargo, muchas consideraciones fueron independientes de cmo que podra resultar.

    Adems de la consulta sobre el programa de geometra, la propia investigacin en la inteligencia artificial se

    estaba desarrollando a lo largo de las lneas que llevaron al Consejo Taker propuesto en 1958 (McCarthy

  • 5/26/2018 G nesis y Principios de Haskell

    6/8

    1959). Esta informacin que representa involucrados sobre el mundo de las oraciones en un lenguaje formal

    adecuado y un programa de razonamiento que decide qu hacer al hacer inferencias lgicas. Representa

    frases por estructura de lista lo que le parece apropiado y una lista lenguaje de procesamiento.

    As, la mayora de los programas LISP utilizan una notacin de prefijo para las expresiones algebraicas,

    porque por lo general debe determinar la principal conectiva antes de decidir qu hacer a continuacin. LISP

    se diferencia de casi cualquier otro sistema de clculo simblico.

    COMIT, Programas Formac, y la Frmula Algol todos expresan los clculos como operaciones sobre alguna

    aproximacin a las formas usuales de impresos expresiones simblicas. SNOBOL opera en cadenas de

    caracteres, pero es neutral sobre la forma de cadenas de caracteres se utilizan para representar informacin

    simblica. Esta caracterstica, probablemente explica el xito de LISP, en competencia con estos lenguajes,

    sobretodo cuando los grandes programas tienen que ser por escrito.

    Programas para hacer el tipo de entrada y salida habitual hoy ni siquiera caba en las memorias disponibles

    en ese momento. Por otra parte, no existan keypunches e impresoras con juegos de caracteres adecuados).

    El primer problema era cmo hacer la estructura de lista en el IBM 704. Este equipo tiene una palabra de 36

    bits y 15 bits de dos partes, llamada la direccin y el decremento, se distingue por instrucciones especiales

    para moverse hacia los registros ndices de 15 bits.

    En este punto hubo cierta indecisin sobre lo que los operadores bsicos deben ser, porque la operacin deextraccin de una parte de la palabra mediante el enmascaramiento fue considerado por separado de la

    operacin de tomar el contenido de una palabra en la memoria como una funcin de su direccin. En ese

    momento, pareca dudoso considerar la ltima operacin como una funcin, ya que su valor depende del

    contenido de la memoria en el momento de la operacin se llev a cabo, por lo que no actuo como una

    funcin matemtica apropiada. Sin embargo, las ventajas de tratarla gramaticalmente como una funcin de

    modo que podra estar compuesto tambin eran evidentes.

    Los IBM 704 hicieron estas operaciones fciles de implementar. Una operacin de construccin para la toma

    de una palabra fuera la lista de almacenamiento y el relleno con contenidos dados. En algn momento se

    defini un cons (a, d, p, t), pero se consideran como una subrutina y no como una funcin con un valor. Este

    trabajo fue realizado en Dartmouth, pero no en un ordenador, ya que el Centro de Clculo de Nueva

    Inglaterra no se esperaba recibir el IBM 704 por un ao ms.

    En relacin con el proyecto de la geometra plana de IBM, Nathaniel Rochester y Herbert Gelernter (por

    consejo de McCarthy) decidi implementar un lenguaje de procesamiento de lista dentro de FORTRAN,

    porque esto pareca a la del manera ms fcil de empezar, y, en esos das, escribir un compilador para un

    nuevo lenguaje se crea que tomar muchos aos-hombre. Este trabajo fue realizado por

    Herbert Gelernter y Carl Gerberich en IBM y llevaron a FLPL, de pie para Lista FORTRAN. Gelernter y

    Gerberich notaron que contras deben ser una funcin, no slo una subrutina, y que su valor debe

    ser la ubicacin de la palabra que haba sido tomado de la lista de almacenamiento gratuito.

    Esto permiti que las nuevas expresiones que se construir fuera de sus subsubexpresiones componiendo

    las ocurrencias de los contras.

    Invent expresiones condicionales en relacin con un conjunto de ajedrez rutinas de movimiento legal que

    escribio en FORTRAN para la IBM 704 en el MIT durante 1957-1958. Este programa no hizo uso de

    procesamiento de listas.

    La implementacin de LISP comenz en el otoo de 1958. La idea original era para producir un compilador,

    pero esto se considera una tarea de gran envergadura, y les fue necesario un poco de experimentacin con

    el fin de obtener buenos convenios para subrutina de vinculacin, manejo de pila y el borrado. Por lo tanto,

    comenzaron con la compilacin, diferentes funciones en lenguaje ensamblador y escribir subrutinas para

    proporcionar un "ambiente" LISP. Estos programas incluidos para leer y de listas de impresin estructuras.

    Los programas que se han compilado a mano fueron escritos en una notacin informal denominado

    expresiones M destinadas a parecerse a FORTRAN tanto como sea posible.

  • 5/26/2018 G nesis y Principios de Haskell

    7/8

    Adems de las instrucciones de asignacin FORTRAN, el lenguaje permitido expresiones condicionales y las

    funciones bsicas de LISP. Permitir la definicin de funciones recursivas requieren ninguna nueva notacin

    de funciones permitidas en FORTRAN I - slo la eliminacin de la restriccin, no declarada en el manual

    FORTRAN, prohibiendo funciones recursivas.

    La notacin M tambin utiliza corchetes en lugar de parntesis para encerrar los argumentos de las

    funciones a fin de reservar parntesis para la lista de la estructura constantes. Fue pensado para compilar

    desde una cierta aproximacin a la notacin M, pero la notacin M nunca fue completamente definida, ya

    que representa Funciones LISP, que se convirtieron en el lenguaje de programacin dominante cuando el

    intrprete ms tarde lleg a estar disponible.

    Una consideracin matemtica que influy en LISP era expresar programas en forma de expresiones

    aplicativas construidas a partir de las variables y constantes que utilizan funciones. Estas expresiones

    obedecen a las leyes matemticas habituales que permiten la sustitucin de expresiones dando el mismo

    valor. El motivo fue permitir que las pruebas de las propiedades de programas utilizando mtodos

    matemticos ordinarios. Esto slo es posible a la medida en que los efectos secundarios se pueden

    evitar. Desafortunadamente, los efectos secundarios son a menudo una gran comodidad a la hora eficiencia

    computacional es importante, y "funciones "con efectos secundarios estn presentes en LISP. Sin embargo,

    el llamado LISP puro est libre de efectos secundarios, y Cartwright y McCarthy en 1978 muestran cmo

    representar los programas LISP puros mediante oraciones y esquemas en lgica de primer orden ydemostrar sus propiedades. Se trata de una reivindicacin de la lucha por la pulcritud matemtica, porque

    ahora es ms fcil demostrar que los programas LISP puros cumplen sus especificaciones que para cualquier

    otro lenguaje de programacin en uso extenso.

    Otra manera de demostrar que LISP era ms ordenado que las mquinas de Turing era escribir una funcin

    LISP universal y demostrar que es ms breve y ms comprensible que la descripcin de una mquina

    universal de Turing. Esto fue la funcin de LISP EVAL [e, A], que calcula el valor de una expresin Lisp

    e - el segundo argumento a ser una lista de asignaciones de valores a las variables.

    La Integridad lgica requerida que la notacin utilizada para expresar funciones utilizado como argumentos

    funcionales sea extendida para proveer para las funciones recursivas, y la notacin ETIQUETA fue inventada

    por Nathaniel Rochester para ese propsito.

    SR Russell not que eval podra servir como intrprete de LISP, rpidamente codificado, y que ahora tena un

    lenguaje de programacin con una intrprete. La inesperada aparicin de un intrprete tiende a congelar la

    forma del lenguaje, y algunas de las decisiones que se toman en lugar para la "Funciones recursivas " ms

    tarde resultaron desafortunada. Estos incluyeron la notacin COND para expresiones condicionales que

    conduce a una innecesaria profundidad y el uso del nmero cero para denotar la lista vaca NIL y el falso

    valor de verdad.

    Las listas de propiedades. La idea de proporcionar a cada tomo con una lista de propiedades estuvo

    presente en la primera implementacin en lenguaje ensamblador. Tambin fue uno de las ideas tericas del

    Consejo Taker, aunque el Consejo Taker (Mc-Carthy 1959) habra requerido una lista de propiedades para

    cualquier expresin sobre qu informaciones se sabe que no se desprende de su estructura. Fue necesario

    para indicar si una funcin fue un SUBR en cdigo mquina o fue un EXPR representada por la estructura

    lista. Varias de las funciones que se ocupan de las listas de propiedades que tambin se pusieron a

    disposicin de los programas de aplicacin que hacen un uso intensivo de ellos.

    Insercin de elementos en las listas y su eliminacin. Uno de los originales virtudes anunciadas de

    procesamiento de listas para el trabajo de AI fue la capacidad de insertar y eliminar elementos de listas. Por

    desgracia, esta instalacin coexiste con inquietud con la estructura de la lista compartida. Por otra parte, las

    operaciones que insertan y eliminan no lo hacen tiene una representacin ordenada como funciones.

    Los nmeros fueron implementados originalmente en LISP I, como las listas de los tomos y esto result ser

    demasiado lento para todos, pero los clculos ms simples. En LISP 1.5, pero en todos los primeros Lisps,

    clculos numricos estaban todava 10 a 100 veces ms lento que en FORTRAN.

  • 5/26/2018 G nesis y Principios de Haskell

    8/8

    Algunas recientes versiones de LISP permiten distinguir tipos, pero en el momento, esto pareca

    incompatible con otras funciones.

    Como lenguaje de programacin LISP tena muchas limitaciones. Algunos de lo ms evidente en la dcada de

    1960, era ultra lento el clculo numrico, la incapacidad para representar objetos por bloques de registros y

    recoger la basura de los bloques, y la falta de un buen sistema de entrada-salida de las expresiones

    simblicas en convencional notaciones. Todos estos problemas y otros iban a ser fijo en LISP 2. En el

    Mientras tanto, hemos tenido que conformarse con LISP 1.5 desarrollado en el MIT que corrige slo las

    deficiencias ms evidentes.

    El proyecto LISP 2 fue una colaboracin de Desarrollo de Sistemas de Corporacin y de Informacin

    Internacional Inc., y se planific inicialmente para el equipo P32, que fue construido por IBM para fines

    militares y que tena una palabra de 48 bits y 18 bits de direcciones, es decir, era mejor que la de IBM

    7090 para un proyecto ambicioso. Por desgracia el proyecto result ms caro de lo esperado, la

    colaboracin result ms difcil de lo esperado, y as LISP 2 fue abandonado, esto fue lamentable, ya que

    mucho ms dinero ya se ha gastado, para desarrollar Lisps con menos funciones.

    LISP es ahora el lenguaje de programacin segundo ms antiguo en la actual despus de FORTRAN y sin

    contar APT, que no se utiliza para programacin. Debe su longevidad a dos hechos. En primer lugar, su

    ncleo ocupa un ptimo el espacio de lenguajes de programacin d que la friccin esttica desalienta

    cambios puramente de notacin. El uso recurrente de expresiones condicionales, la representacin de lainformacin simblica externamente por listas e internamente por la estructura de la lista, y la

    representacin del programa en la misma manera, probablemente tendr una vida muy larga.

    En segundo lugar, LISP todava tiene caractersticas operativas no igualadas por otro lenguaje eso lo hace un

    vehculo ideal para sistemas de nivel superior para simblica computacin y la inteligencia artificial. Estos

    incluyen el sistema de tiempo de ejecucin que dar un buen acceso a las caractersticas de la mquina host y

    de su sistema operativo, su lenguaje interno con estructura de lista hace que sea un bueno para la

    compilacin de lenguajes de nivel an ms altos, su compatibilidad con los sistemas que producen binario o

    programa de nivel de ensamblador y la disponibilidad de su intrprete un lenguaje de comandos para la

    conduccin de otros programas.

    LISP quedar obsoleto cuando alguien hace una ms amplia lenguaje que domina LISP da prcticamente y

    tambin un clara semntica matemtica a un conjunto ms amplio de caractersticas.