Realmente siento que debería aprender Lisp y hay muchos buenos recursos para ayudarme a hacerlo.
La sintaxis complicada no me desanima, pero en qué lugar de la "programación comercial tradicional" encontraría lugares tendría sentido usarlo en lugar de un lenguaje de procedimiento.
¿Existe una aplicación asesina comercial por ahí escrita en Lisp?
functional-programming
lisp
David
fuente
fuente
Respuestas:
Uno de los principales usos de Lisp es en Inteligencia Artificial. Un amigo mío en la universidad tomó un curso de posgrado de IA y para su proyecto principal escribió un solucionador " Lights Out " en Lisp. Varias versiones de su programa utilizaron rutinas de IA ligeramente diferentes y las pruebas en aproximadamente 40 computadoras arrojaron algunos resultados bastante buenos (desearía que estuviera en algún lugar en línea para vincularme, pero no creo que lo sea).
Hace dos semestres usé Scheme (un lenguaje basado en Lisp) para escribir un programa interactivo que simulaba la rutina de "Quién está en primer lugar" de Abbott y Costello. La entrada del usuario se comparó con algunas estructuras de datos bastante complicadas (que se asemejan 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 3x3 (un algoritmo que podría extenderse fácilmente a rompecabezas de diapositivas más grandes).
En resumen, aprender Lisp (o Scheme) puede no producir muchas aplicaciones prácticas más allá de la IA, pero es una experiencia de aprendizaje extremadamente valiosa, como muchos otros han dicho. La programación en un lenguaje funcional como Lisp también lo ayudará a pensar de manera recursiva (si ha tenido problemas con la recurrencia en otros idiomas, esto podría ser de gran ayuda).
fuente
Lisp es un lenguaje grande y complejo con un tiempo de ejecución grande y complejo para admitirlo. Por esa razón, Lisp es el más adecuado para problemas grandes y complicados.
Ahora, un problema complejo no es lo mismo que uno complicado . Un problema complejo es uno con muchos pequeños detalles, pero que no es difícil. Escribir un sistema de reserva de aerolíneas es un negocio complejo, pero con suficiente dinero y programadores no es difícil. Obtener la diferencia?
Un problema complicado es uno complicado, uno en el que la división y conquista tradicional no funciona. Controlar un robot o trabajar con datos que no son tabulares (por ejemplo, idiomas) o situaciones muy dinámicas.
Lisp está realmente bien adaptado a problemas donde la solución debe ser expandible; El ejemplo clásico es el editor de texto emacs. Es totalmente programable y, por lo tanto, un entorno de programación en sí mismo.
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 completamente (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 se ejecutarían las computadoras y la computación: el modelo de Von Neumann. Lo central del modelo de Von Neumann es que solo tiene una memoria y almacena allí tanto su código como sus datos. Observe cuidadosamente que un programa Java (o C #, o lo que quiera) es una manifestación del modelo de Turing. Establece su programa en concreto, de una vez por todas. Entonces espera poder manejar todos los datos que se le agreguen.
Lisp mantiene el modelo de Von Neuman; No existe un límite nítido y predeterminado entre el código y los datos. La programación en Lisp le abre la mente al poder del modelo Von Neumann. La programación en Lisp te hace ver viejos conceptos bajo una nueva luz.
Finalmente, al ser interactivo, aprenderá a interactuar con sus programas a medida que los desarrolle (en lugar de compilar y ejecutar). Esto también cambia la forma en que 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 supere a los idiomas "tradicionales"?
Si eres un programador avanzado, necesitas herramientas avanzadas. Y no hay herramienta más avanzada que Lisp. O, en otras palabras: la respuesta es sí si sus problemas son difíciles. No lo contrario.
fuente
En respuesta a @lassevk :
fuente
sintaxis complicada ??
La sintaxis para lisp es increíblemente simple .
Aplicación asesina escrita en lisp: emacs . Lisp le permitirá extender emacs a voluntad para hacer casi cualquier cosa que se le ocurra que pueda hacer un editor.
Pero , solo debes aprender lisp si quieres , y es posible que nunca puedas usarlo en el trabajo, pero aún así es increíble.
Además, quiero agregar: incluso si encuentra lugares donde lisp tenga sentido, probablemente no convencerá a nadie más de que debe usarse sobre java, c ++, c #, python, ruby, etc.
fuente
No puedo responder por experiencia de primera mano, pero deberías leer lo que escribió Paul Graham en Lisp . En cuanto a la parte de "aplicación asesina", lee Batir los promedios .
fuente
Programé en Lisp profesionalmente durante aproximadamente un año, y definitivamente vale la pena aprenderlo. Tendrá una oportunidad incomparable para 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 incomparable en tiempo de ejecución, traduciendo libremente entre código y datos. Por lo tanto, las situaciones donde las acciones del usuario pueden desencadenar la necesidad de construir estructuras complejas dinámicamente es donde Lisp realmente brilla. Los populares programadores de vuelos de aerolíneas están escritos en Lisp, y también hay muchos CAD / CAM en Lisp.
fuente
Si te gusta la programación, debes aprender Lisp por pura alegría. XKCD expresa perfectamente la iluminación intelectual que sobreviene. Aprender Lisp es para el programador lo que la meditación es para el monje budista (y quise decir esto sin ninguna connotación blasfema).
fuente
Lisp es muy útil para crear pequeñas DSL. Tengo una copia de Lisp in a Box ejecutándose en el trabajo y he escrito pequeños DSL para interrogar las bases de datos del servidor SQL y generar capas de datos, etc. en C #. Todo el código de mi placa de caldera ahora está escrito en macros lisp que salen a C #. Genero HTML, XML, todo tipo de cosas con él. Si bien desearía poder usar Lisp para la codificación diaria, Lisp puede aportar beneficios prácticos.
fuente
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, ve cómo expresa una estructura de árbol de sintaxis con bastante facilidad (tenga en cuenta que esto no es del todo correcto porque la vista previa se encuentra un poco; las r deben alinearse con las fns en el argumento recursivo de clasificación rápida):
fuente
let
y usar undefun
al comienzo de la función para definirfn
que no cambia.Descubrí que aprender un nuevo idioma siempre influye en tu estilo de programación en idiomas que ya conoces. Para mí, siempre me hizo pensar de diferentes maneras para resolver un problema en mi idioma primario, que es Java. Creo que, en general, solo amplía su horizonte en términos de programación.
fuente
Si tiene que preguntarse si debe aprender lisp, probablemente no sea necesario.
fuente
Tomé una "clase de ceceo" en la universidad en los años ochenta. A pesar de Grokking todos los conceptos presentados en la clase, me quedé sin ningún aprecio por lo que hace grande a Lisp. Me temo que mucha gente ve el lisp como un lenguaje de programación más, que es lo que ese curso en la universidad me hizo hace muchos años. Si ve a alguien quejándose de la sintaxis de lisp (o la falta de ella), existe una buena posibilidad de que sea una de esas personas que no haya captado la grandeza de lisp. Fui una de esas personas durante mucho tiempo.
No fue sino hasta dos décadas después, cuando reavivé mi interés en el lisp, que comencé a "entender" lo que hace que el lisp sea interesante, de todos modos para mí. Si logras aprender lisp sin que te sorprendan los cierres y las macros de lisp, probablemente hayas perdido el punto.
fuente
Es posible que Learning LISP / Scheme no le brinde un mayor espacio de aplicación, pero lo ayudará a tener una mejor idea de la programación funcional, sus reglas y sus excepciones.
Vale la pena invertir tiempo solo para aprender la diferencia en la belleza de seis funciones puras anidadas y la pesadilla de seis funciones anidadas con efectos secundarios.
fuente
De http://www.gigamonkeys.com/book/introduction-why-lisp.html
fuente
"Vale la pena aprender a Lisp por la profunda experiencia de iluminación que tendrás cuando finalmente la obtengas; esa experiencia te hará un mejor programador para el resto de tus días, incluso si nunca usas mucho Lisp".
--Eric S. Raymond, "Cómo convertirse en un hacker"
http://www.paulgraham.com/avg.html
fuente
Estoy de acuerdo en que Lisp es uno de esos idiomas que nunca puede usar en un entorno comercial. Pero incluso si no lo hace, aprenderlo definitivamente expandirá su comprensión de la programación en general. Por ejemplo, aprendí Prolog en la universidad y, aunque nunca lo usé después, me dio una mejor comprensión de muchos conceptos de programación y (a veces) una mayor apreciación por los idiomas que uso.
Pero si vas a aprenderlo ... por supuesto, lee en Lisp
fuente
¡Aprender lisp pondrá Javascript en una luz completamente diferente! Lisp realmente te obliga a comprender tanto la recursividad como el conjunto de "funciones como objetos de primera clase" -paradigm. 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 comprenderlo mejor es inmensamente útil.
fuente
El Script-Fu de Gimp es tonto. Esa es una aplicación asesina de Photoshop.
fuente
De acuerdo, podría ser extraño, pero realmente no me gustan tanto los ensayos de Paul Graham, y en Lisp es un libro muy rudo si aún no conoces Common Lisp. En cambio, diría que vaya a la práctica Common Lisp de Siebel . En cuanto a las "aplicaciones asesinas", Common Lisp parece encontrar su lugar en tiendas de nicho, como ITA , por lo que si bien no hay una aplicación sinónimo de CL como Rails es para Ruby, hay lugares en la industria que la usan si lo haces Un poco de excavación.
fuente
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 por la forma en que mejora su capacidad de codificación para pensar y usar las funciones como 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 forma en que está estructurado su código.
fuente
Para agregar a las otras respuestas:
Porque el curso SICP (los videos están disponibles aquí ) es increíble: ¡te enseña Lisp y mucho más !
fuente
¿Aplicación asesina? Franz Inc. tiene una larga lista de historias de éxito , pero esta lista solo incluye a los 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.
fuente
Puede usar Clojure hoy para escribir pruebas y scripts en la parte superior de la máquina virtual Java. Si bien hay otros lenguajes Lisp implementados en la JVM, creo que Clojure hace el mejor trabajo de integración con Java.
Hay momentos en que el lenguaje Java se interpone en el camino de escribir pruebas para código Java (incluida la "programación comercial tradicional"). (No me refiero a eso como una acusación de Java, otros lenguajes sufren el mismo problema, pero es un hecho. Dado que el tema, no Java, no lo elaboraré. Por favor, siéntase libre de comenzar un nuevo tema si alguien quiere discutirlo.) Clojure elimina muchos de esos obstáculos.
fuente
Lisp puede usarse en cualquier lugar donde use la programación tradicional. No es tan diferente, simplemente es más poderoso. ¿Escribir una aplicación web? puedes hacerlo en Lisp, escribiendo una aplicación de escritorio? puede hacerlo en Lisp, lo que sea, probablemente pueda hacerlo en Lisp, Python o cualquier otra programación genérica (hay algunos lenguajes que son adecuados para una sola tarea).
El mayor obstáculo probablemente será la aceptación de su jefe, sus compañeros o sus clientes. Eso es algo que tendrá que trabajar con ellos. La elección de una solución pragmática como Clojure que pueda aprovechar la base de instalación actual de la infraestructura Java, desde la JVM hasta las bibliotecas, podría ayudarlo. Además, si tiene un programa Java, puede hacer una arquitectura de complemento y escribir complementos de Clojure para él y terminar escribiendo la mitad de su código en Clojure.
fuente
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 lo corta.
Muchas de las funciones de AutoCAD son en realidad rutinas LISP.
fuente
Este es un tema que yo mismo he reflexionado durante un tiempo, pero realmente no he tomado una decisión, ya que el problema principal es el tiempo habitual ...;)
Y como no puedo encontrar estos enlaces en esta publicación, los agrego para interés público:
Historia de éxito y fracaso: listado 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
fuente
¡La sintaxis es irrelevante, la legibilidad no lo es!
fuente
No digo que esta sea una aplicación excelente, pero parece que podría ser genial http://code.google.com/p/plop/
fuente
¿Aplicación asesina? El motor de búsqueda de vuelos de ITA Software es uno.
En cuanto a "por qué", lo más probable es que lo convierta en un mejor desarrollador y es extremadamente improbable que lo haga peor. Sin embargo, puede hacer que prefiera dialectos lisp a otros idiomas.
fuente