world quien programing programa learn investigador hello estructura desarrollo creador compiler common apellido functional-programming lisp

functional-programming - quien - lisp programing



¿Por qué debería aprender Lisp? (29)

"Vale la pena aprender Lisp por la profunda experiencia de iluminación que obtendrás cuando finalmente la obtengas, esa experiencia te convertirá en un mejor programador por el resto de tus días, incluso si nunca usas Lisp mucho".

- Eric S. Raymond, "Cómo convertirse en pirata informático"

http://www.paulgraham.com/avg.html

Realmente siento que debería aprender Lisp y hay muchos buenos recursos para ayudarme a hacerlo.

No me desanime la complicada sintaxis, pero donde en la "programación comercial tradicional" encontraría lugares en los que tendría sentido usarlos en lugar de un lenguaje de procedimiento.

¿Hay alguna aplicación asesina comercial que haya sido escrita en Lisp?


¿Aplicación asesina? Franz Inc. tiene una larga lista de historias de éxito , pero esta lista solo incluye usuarios de AllegroCL ... Probablemente haya otros. Mi favorita es la historia de Naughty Dog , ya que era un gran fanático de los juegos de Crash Bandicoot.

Para aprender Common Lisp, recomendaría Practical Common Lisp . Tiene un enfoque práctico que al menos para mí lo hizo más fácil que otros libros que he visto.


¿Aplicación asesina? El motor de búsqueda de vuelos de ITA Software es uno.

En cuanto al "por qué", lo más probable es que te haga un mejor desarrollador y es muy poco probable que te haga una peor. Sin embargo, puede hacer que prefiera los dialectos de lisp a otros idiomas.


¿Sintaxis complicada? La belleza de lisp es que tiene una sintaxis ridículamente simple. Es solo una lista, donde cada elemento de la lista puede ser otra lista o un tipo de datos elemental.

Vale la pena aprender debido a la forma en que mejora su capacidad de codificación para pensar y usar funciones como solo otro tipo de datos. Esto mejorará la forma en que codifica en un lenguaje imperativo y / u orientado a objetos, ya que le permitirá ser más flexible mentalmente con la estructura de su código.


Aprender LISP / Scheme puede no brindarle un mayor espacio de aplicación, pero le ayudará a tener una mejor idea de la programación funcional, sus reglas y sus excepciones.

Vale la pena invertir el tiempo solo para aprender la diferencia en la belleza de seis funciones anidadas puras, y la pesadilla de seis funciones anidadas con efectos secundarios.


Aprendiendo lisp pondrá Javascript en una luz completamente diferente! Lisp realmente te obliga a comprender tanto la recursividad como todas las "funciones como objetos de primera clase" -paradigma. Vea el excelente artículo de Crockfords sobre Scheme vs Javascript . ¡JavaScript es quizás el idioma más importante en la actualidad, por lo que entenderlo mejor es inmensamente útil!


Bueno, podría ser raro, pero realmente no me gustan mucho los ensayos de Paul Graham, y en Lisp es un libro realmente rudo si no tienes un poco de conocimiento de Common Lisp. En cambio, yo diría que vaya por Practical Common Lisp de Siebel. En cuanto a las "aplicaciones asesinas", Common Lisp parece encontrar su lugar en los nichos de tiendas, como ITA , así que aunque no existe una aplicación para CL de la misma manera que Rails es para Ruby, hay lugares en la industria que lo usan si lo haces un poco cavando


Cualquier idioma se ve mucho más difícil cuando uno no usa las convenciones de sangría comunes de un idioma. Cuando uno los sigue de Lisp, uno ve cómo expresa una estructura de árbol de sintaxis con bastante facilidad (nota, esto no es del todo correcto porque la vista previa miente un poco, las r deben alinearse con las fns en el argumento recursivo de la lista rápida):

(defun quicksort (lis) (if (null lis) nil (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x)))) (append (quicksort (remove-if-not fn r)) (list x) (quicksort (remove-if fn r))))))


De http://www.gigamonkeys.com/book/introduction-why-lisp.html

Uno de los mitos más repetidos sobre Lisp es que está "muerto". Si bien es cierto que Common Lisp no es tan utilizado como, por ejemplo, Visual Basic o Java, parece extraño describir un lenguaje que se sigue utilizando para nuevos desarrollos y que continúa atrayendo a nuevos usuarios como "muertos". Algunas historias de éxito recientes de Lisp incluyen Viaweb de Paul Graham, que se convirtió en Yahoo Store cuando Yahoo compró su compañía; El sistema de precios y compra de tarifas aéreas de ITA Software, QPX, utilizado por el vendedor de boletos en línea Orbitz y otros; El juego Naughty Dog para PlayStation 2, Jak y Daxter, que está escrito principalmente en un dialecto de Lisp específico de dominio que Naughty Dog inventó, llamado GOAL, cuyo compilador está escrito en Common Lisp; y el Roomba, el aspirador robótico autónomo, cuyo software está escrito en L, un subconjunto de Common Lisp compatible con versiones anteriores. Quizás aún más revelador es el crecimiento del sitio web de Common-Lisp.net, que alberga proyectos de código abierto de Common Lisp, y la cantidad de grupos de usuarios locales de Lisp que han surgido en los últimos años.


Descubrí que aprender un nuevo idioma siempre influye en tu estilo de programación en los idiomas que ya conoces. Para mí, siempre me hizo pensar de diferentes maneras para resolver un problema en mi idioma principal, que es Java. Creo que, en general, amplía tu horizonte en términos de programación.



Este es un tema que he considerado por un tiempo, pero realmente no he llegado a una decisión, ya que el tiempo habitual es el principal problema ...;)

Y como no puedo encontrar estos enlaces en este post, los agrego para interés público:

Historia de éxito y fracaso: Lisping en JPL

Historia de éxito realmente impresionante: Lisp en uso en la corporación Orbitz

Comparación y análisis de si usar Lisp en lugar de Java: Lisp como alternativa a Java


Estoy de acuerdo con que Lisp es uno de esos idiomas que nunca podrás usar en un entorno comercial. Pero incluso si no lo haces, aprenderlo definitivamente ampliará tu comprensión de la programación como un todo. Por ejemplo, aprendí Prolog en la universidad y aunque nunca lo utilicé después, me dio una mayor comprensión de muchos conceptos de programación y (a veces) una mayor apreciación de los idiomas que uso.

Pero si vas a aprenderlo ... por supuesto, lee On Lisp


La sintaxis es irrelevante, ¡la legibilidad no lo es!


Lisp es muy útil para crear pequeñas DSL. Tengo una copia de Lisp en una caja ejecutándose en el trabajo y he escrito pequeñas DSL para interrogar a las bases de datos del servidor SQL y generar capas de datos, etc. en C #. Todo el código de mi placa de la caldera ahora está escrito en macros lisp que salen a C #. Genero HTML, XML, todo tipo de cosas con él. Aunque me gustaría poder usar Lisp para la codificación diaria, Lisp puede traer beneficios prácticos.


Lisp se puede usar en cualquier lugar donde uses la programación tradicional. No es tan diferente, es simplemente más poderoso. Escribir una aplicación web? puedes hacerlo en Lisp, escribiendo una aplicación de escritorio? puedes hacerlo en Lisp, sea lo que sea, probablemente puedas hacerlo en Lisp, o Python, o cualquier otra programación genérica (hay algunos idiomas que son adecuados para una sola tarea).

El mayor obstáculo probablemente sea la aceptación de su jefe, sus compañeros o sus clientes. Eso es algo que tendrás que trabajar con ellos. Elegir una solución pragmática como Clojure que pueda aprovechar la base de instalación actual de la infraestructura de Java, desde la JVM hasta las bibliotecas, podría ayudarlo. Además, si tiene un programa Java, puede hacer una arquitectura de plug-in y escribir complementos Clojure para ello y terminar escribiendo la mitad de su código en Clojure.



No es una razón, pero (trivial) AutoCAD tiene soporte de tiempo de ejecución LISP y DCL. Es una forma conveniente de escribir macros complejas (incluida la automatización ActiveX) si no desea usar VBA o sus SDK de C ++ o .NET, o si una expresión DIESEL no la corta.

Muchas de las funciones de AutoCAD son en realidad rutinas LISP.



Para agregar a las otras respuestas:

Porque el curso de SICP (los videos están disponibles here ) es increíble: ¡te enseña Lisp y mucho más !


Programé en Lisp profesionalmente durante aproximadamente un año, y definitivamente vale la pena aprender. Tendrá la oportunidad sin igual de eliminar la redundancia de su código, al poder reemplazar todo el código repetitivo con funciones donde sea posible, y macros donde no. También podrá acceder a una flexibilidad sin igual en el tiempo de ejecución, traduciendo libremente entre código y datos. Por lo tanto, las situaciones en las que las acciones de los usuarios pueden desencadenar la necesidad de construir estructuras complejas dinámicamente es donde realmente brilla Lisp. Los planificadores de vuelos de líneas aéreas populares están escritos en Lisp, y también hay muchos CAD / CAM en Lisp.


Puede usar Clojure hoy para escribir pruebas y scripts en la parte superior de Java VM. Si bien hay otros lenguajes Lisp implementados en la JVM, creo que Clojure hace el mejor trabajo de integración con Java.

Hay ocasiones en que el lenguaje Java se interpone en el proceso de escribir pruebas para el código Java (incluida la "programación comercial tradicional"). (No me refiero a eso como acusación de Java, otros lenguajes adolecen del mismo problema), pero es un hecho. Dado que el tema, no Java, no daré más detalles. Por favor, siéntase libre de comenzar un nuevo tema si alguien quiere discutirlo.) Clojure elimina muchos de esos obstáculos.


Script-Fu de Gimp es lipsish. Esa es una aplicación asesina de photoshop.


Si te gusta programar, debes aprender Lisp por la pura alegría de hacerlo. XKCD expresa perfectamente la iluminación intelectual que sigue. Aprender Lisp es para el programador lo que la meditación es para el monje budista (y lo quise decir sin ninguna connotación blasfema).


Si tiene que preguntarse si debe aprender lisp, probablemente no necesite hacerlo.


Tomé una "clase de lisp" en la universidad en los años ochenta. A pesar de asimilar todos los conceptos presentados en la clase, me quedé sin apreciación de lo que hace que lisp sea genial. Me temo que mucha gente considera el lisp como otro lenguaje de programación, que es lo que el curso en la universidad hizo por mí hace tantos años. Si ves a alguien quejándose de la sintaxis de lisp (o la falta de ella), hay muchas posibilidades de que sea una de esas personas que no ha captado la grandeza de lisp. Fui una de esas personas durante mucho tiempo.

No fue sino hasta dos décadas más tarde, cuando reavivé mi interés en el ceceo, que comencé a "entender" lo que hace que el ceceo sea interesante, para mí de todos modos. Si consigues aprender lisp sin que te pasen por alto los cierres y las macros lisp, probablemente hayas olvidado el punto.


Uno de los principales usos de Lisp es en Inteligencia Artificial. Un amigo mío en la universidad tomó un curso de postgrado de AI y para su proyecto principal escribió un " Lights Out " solucionador en Lisp. Varias versiones de su programa utilizaron rutinas de IA ligeramente diferentes y las pruebas en aproximadamente 40 computadoras arrojaron algunos resultados bastante claros (ojalá estuviera en línea en algún lugar para que me vincule, pero no creo que sea así).

Hace dos semestres utilicé Scheme (un lenguaje basado en Lisp) para escribir un programa interactivo que simulaba la rutina "Quién está en primer lugar" de Abbott y Costello. La entrada del usuario se comparó con algunas estructuras de datos bastante complicadas (parecidas a mapas en otros idiomas, pero mucho más flexibles) para elegir cuál sería la respuesta adecuada. También escribí una rutina para resolver un rompecabezas de diapositivas de 3x3 (un algoritmo que podría extenderse fácilmente a rompecabezas de diapositivas más grandes).

En resumen, aprender Lisp (o Scheme) puede no ofrecer muchas aplicaciones prácticas más allá de la IA, pero es una experiencia de aprendizaje extremadamente valiosa, como muchos otros han afirmado. La programación en un lenguaje funcional como Lisp también lo ayudará a pensar recursivamente (si ha tenido problemas con la recursión en otros idiomas, podría ser una gran ayuda).


¿sintaxis complicada ?

La sintaxis para lisp es increíblemente simple .

Killer aplicación escrita en lisp: emacs . Lisp te permitirá extender emacs a voluntad para hacer casi cualquier cosa que se te ocurra que pueda hacer un editor.

Sin embargo , solo debe aprender lisp si lo desea , y es posible que nunca lo use en el trabajo, pero aún así es impresionante.

Además, quiero agregar: incluso si encuentras lugares donde lisp tenga sentido, probablemente no convencerás a nadie más de que debería usarse sobre java, c ++, c #, python, ruby, etc.


Lisp es un lenguaje grande y complejo con un tiempo de ejecución grande y complejo para soportarlo. Por esa razón, Lisp es más adecuado para problemas grandes y complicados.

Ahora, un problema complejo no es lo mismo que uno complejo . Un problema complejo es uno con muchos pequeños detalles, pero que no es difícil. Escribir un sistema de reserva de líneas aéreas es un negocio complejo, pero con suficiente dinero y programadores no es difícil. Obtener la diferencia?

Un problema complicado es intrincado, uno en el que la división y conquista tradicionales no funciona. Controlar un robot, o trabajar con datos que no son tabulares (idiomas, por ejemplo) o situaciones altamente dinámicas.

Lisp es muy adecuado para problemas donde la solución debe ser ampliable; el ejemplo clásico es el editor de texto de emacs. Es totalmente programable y, por lo tanto, un entorno de programación por derecho propio.

En su famoso libro PAIP , Norvig dice que Lisp es ideal para la programación exploratoria. Es decir, programar una solución a un problema que no se comprende por completo (a diferencia de un sistema de reserva en línea). En otras palabras: problemas complicados.

Además, aprender Lisp te recordará algo fundamental que se ha olvidado: la diferencia entre Von Neumann y Turing. Como sabemos, el modelo de computación de Turing es un modelo teórico interesante, pero inútil como modelo para diseñar computadoras. Von Neumann, por otro lado, diseñó un modelo de cómo las computadoras y la computación debían ejecutarse: el modelo de Von Neumann. Para el modelo de Von Neumann, es fundamental tener solo una memoria y almacenar allí su código y sus datos. Observe cuidadosamente que un programa Java (o C #, o lo que quiera) es una manifestación del modelo de Turing. Estableces tu programa en concreto, de una vez por todas. Entonces esperas que puedas manejar todos los datos que se arrojen sobre él.

Lisp mantiene el modelo de Von Neuman; no hay un límite definido y definido entre el código y los datos. La programación en Lisp abre su mente al poder del modelo de Von Neumann. La programación en Lisp te hace ver los viejos conceptos bajo una nueva luz.

Finalmente, al ser interactivo, aprenderá a interactuar con sus programas a medida que los desarrolla (en lugar de compilarlos y ejecutarlos). Esto también cambia la forma en que usted programa, y ​​la forma en que ve la programación.

Con esta introducción, finalmente puedo ofrecer una respuesta a su pregunta: ¿Encontrará lugares donde eclipsa a los idiomas "tradicionales"?

Si usted es un programador avanzado, necesita herramientas avanzadas. Y no hay una herramienta más avanzada que Lisp. O, en otras palabras: la respuesta es sí si sus problemas son difíciles. No de otra manera