resueltos - ¿Cuál es tu idea equivocada favorita sobre Lisp?
listas en lisp ejemplos (17)
Por favor responde con uno por uno .
Si explica por qué no es cierto, intente evitar declaraciones generales y brinde ejemplos particulares.
"El Universo está escrito en Lisp". Pero aparentemente no lo es .
Cualquier aplicación suficientemente avanzada es indistinguible del ruido de línea.
La gente culpa a lisp por paréntesis. Me gustaría que dijeran cómo implementarían un lenguaje de matriz de listas sin ellos ...
Lisp no puede proporcionar ejecutables independientes.
Utilizando SBCL, puede guardar el estado actual de su máquina virtual de lisp en un solo archivo ejecutable con una llamada de función simple. Cuando inicie este ejecutable, comenzará desde el estado original y llamará a la función o lambda que haya proporcionado cuando se guardó.
Lisp no tiene IDE, por lo que debe usar el bloc de notas y contar continuamente todos los paréntesis superfluos.
De hecho, hay bastantes. Para Common Lisp, lo mejor es usar Emacs con SLIME tanto en Windows como en Linux. Proporciona un Oyente (para evaluar), un Inspector (para ver los resultados), un Depurador (con paso), un Editor altamente personalizable (esto es Emacs después de todo). SLIME admite 10 implementaciones diferentes.
Mi concepto equivocado favorito es que es un "lenguaje funcional" que desalienta la iteración, OOP o cualquier otro estilo de programación que pueda nombrar.
Nada podría estar más lejos de la verdad.
En primer lugar, "Lisp", dependiendo del significado que el orador pretenda, no es en realidad un idioma sino una familia lingüística. Hay un par de miembros más o menos conocidos y extendidos de esta familia: Scheme , Common Lisp , Emacs-Lisp y AutoLisp son los tradicionales; hoy en día, también hay Nu , newLISP (que en realidad es más como un "viejoLISP" que uno moderno, pero de todos modos), Arc y Clojure .
Es cierto que los Schemers parecen favorecer un estilo funcional y desalentar la iteración a favor de la recursión. Sin embargo, hasta donde puedo decir, los Schemers son en realidad una minoría en el mundo de Lisp, al menos cuando se considera el uso práctico de Lisp como una herramienta de programación en comparación con un tema de investigación o estudio.
No sé mucho acerca de AutoLisp o de todos los demás dialectos Lisp junto a Scheme y Common Lisp, pero lo que sí sé es que Common Lisp definitivamente no es un lenguaje de paradigma único que evita la programación imperativa o incluso orientada a objetos. De hecho, Common Lisp presenta el sistema de objetos basado en clases más poderoso que conozco, incorporando cosas como la programación orientada a aspectos desde el primer momento.
Lisp me parece que realmente es la familia lingüística que más fomenta los experimentos en nuevas direcciones y más fácilmente incorpora paradigmas de programación que no son compatibles desde el principio. Esto incluye la programación imperativa. ¡Common Lisp incluso tiene GOTO!
Mi idea falsa favorita de lisp: ¡CL realmente significa CthuLhu!
Fuera de bromas; con mucho, la idea equivocada más extendida sobre toda clase de dialectos de lisp, es que la dependencia de sintaxis de s-expressions en paréntesis daña la legibilidad, cuando de hecho es este mismo rasgo lo que ayuda a hacer el código de lisp mucho más escueto, claro y legible que el mayoría de otros lenguajes de programación.
No sé si tengo una idea falsa favorita ... pero a menudo veo que los programadores hablan de "LISP" y por qué no les gusta / es inapropiado / es académico / nunca funcionará para el proyecto X. estaría bien excepto que cuando dicen "LISP" quieren decir "Scheme" por lo que realmente quieren decir "un subconjunto de Scheme" por el cual realmente quieren decir "un subconjunto medio olvidado de Scheme de ese curso de AI o idiomas hace 5 años que no me gustó ".
Parece que hay un poco de prejuicio irracional contra Lisp (s) desde esta dirección. Los prejuicios racionales son algo completamente diferente.
No tengo un concepto erróneo "favorito", porque la mayoría de los conceptos erróneos, y no solo acerca de Lisp, son solo molestias. Pero tengo un concepto erróneo sobre Lisp que realmente me sorprendió cuando leí la historia de Lisp (específicamente History of Lisp y The Evolution of Lisp ).
Lisp es conocido por ser un lenguaje lento interpretado por muchas personas, pero en realidad tenía un compilador de algo menos de un año después de tener su primer intérprete en funcionamiento , creo, y la siguiente historia es una larga lista de trabajo destinado a la optimización que ¡resultó en algunas implementaciones de Lisp superando a Fortran en el aplastamiento de números !
La fuente más probable del mito es que muchas personas obtienen solo Lisp de un curso de CS sobre Scheme, donde se escriben a sí mismos como intérpretes. Y probablemente muchos de ellos odien el curso porque les enseña conceptos hermosos pero complejos sobre computabilidad o recursión, y luego asimilan sus problemas con el curso con sus problemas con Lisp.
Que es para Inteligencia Artificial
Que todos los paréntesis hacen que el código sea ilegible. Después de aproximadamente dos semanas, y con un editor de texto decente, simplemente dejas de notarlos.
[ETA - Acabo de encontrar una cita del viejo Lisper Kenny Tilton: "¿Paréntesis? ¿Qué paréntesis? No he notado ningún paréntesis desde mi primer mes de programación de Lisp. Me gusta preguntar a las personas que se quejan de los paréntesis en Lisp si son molesto por todos los espacios entre palabras en un periódico ... "]
Todo en Lisp es una lista, no hay otras estructuras de datos complejas eficientes.
No es verdad. En Common Lisp hay clases, estructuras, tablas hash, matrices multidimensionales, cadenas mutables, etc. Cada una de ellas se implementa de manera eficiente. Por ejemplo, el compilador de SBCL emite un código nativo en línea optimizado para el acceso a la matriz.
muchos piensan que lisp es un lenguaje orientado a listas (lo que sea que eso signifique).
es una creencia generalizada, incluso entre los que escuchan, que la gran cosa más importante sobre el ceceo es la celda de cons y las listas individuales que uno puede construir usando (sexp). las personas que creen que no entienden las verdaderas razones que hacen que el ceceo sea un lenguaje más productivo que los otros lenguajes principales (¡esta es solo mi opinión subjetiva!), y no entiendo que el ceceo podría ser lo que es sin tener el célula de cons en el juego en absoluto.
una selección aleatoria de cosas que son importantes para hacer que el ceceo sea lo que es, y que son fácilmente realizables sin sexp''s :
- REPL
- compilador disponible en tiempo de ejecución
- tipeo dinámico
- abstracciones sintácticas (macros)
- cierres
- sintaxis simple que es fácil de editar (y "analizar" por el cerebro)
algunas explicaciones:
en pocas palabras, el tipado dinámico significa que no los lugares tienen tipo, sino los valores de tiempo de ejecución . esta es una ayuda importante si no conoce de antemano todos sus requisitos, y su aplicación se transforma constantemente a medida que el proyecto evoluciona. según mi experiencia, este es en gran parte el caso, solo que con muchos más obstáculos cuando la tipificación estática está en la imagen.
probablemente muchos argumentarían que los contras y sexp son cruciales para un macro sistema flexible. lo crucial es una sintaxis simple y una estructura de datos fácil de manipular en la que se analiza. la sintaxis y las listas sexp juntas son un buen candidato, pero hay muchas otras.
Estoy contento con los parens, pero no estoy contento con la otra parte, es decir, usar listas detalladas para representar el código del programa, porque tiene una deficiencia importante: no se puede anotar con cosas aleatorias sin alterar los datos. eso ya está representado con eso. Por ejemplo, no puedo anotar una lista tan detallada que represente código de programa con el hecho de que fue editada por Joe hace dos días, sin convertir esa forma en una tontería para el compilador lisp. estas anotaciones son cada vez más importantes a medida que sus DSL se vuelven más complejas y sus macros se convierten en pequeños compiladores que compilan su DSL en lisp.
Que es un lenguaje de programación. Hoy Lisp es una familia de lenguajes de programación que incluye Common Lisp y Scheme , que son estándares con varias implementaciones cada uno, y también Clojure , Arc y muchos otros .
Ese "CLOS" es un lenguaje de programación, y ese Lisp es un lenguaje interpretado, solo funcional. Realmente, escuché eso de los profesores de CS. Y creo que hubo alguna tabla engañosa en uno de estos libros de Conceptos del lenguaje de programación que sugería eso.
Profesores de CS en colegios y universidades hoy (particularmente los más jóvenes) fueron educados usando Java, C y C ++, y probablemente aprendieron Scheme o Common Lisp en un curso llamado "estudios comparativos de lenguaje de programación" o "paradigmas de programación", que era probablemente enseñado por alguien a quien no le gusta ningún lenguaje Lisp, y les enseñó sobre funciones, listas, símbolos y funciones de orden superior. Período. Luego terminan enseñando lo que aprendieron:
- Lisp es un lenguaje de programación
- Lisp es interpretado
- Lisp es lento
- Lisp es un lenguaje de IA (la última vez que revisé el libro de Robert Sebesta, todavía decía eso, pero hay una nueva edición, por lo que puede haber solucionado esto)
- Lisp no tiene soporte OO (!!!)
- Lisp es un lenguaje funcional (en lugar de soportar mínimamente cualquier otro paradigma)
- En Lisp no hay tipos de datos
- Lisp no tiene estructuras de datos, excepto listas (y, por lo tanto, no es útil para el cálculo de números)
- "Lisp ya no se usa, y solo se usa en este curso porque es el lenguaje funcional más importante"
Incluso vi a un profesor muy inteligente dando un ejemplo de multiplicación de matrices en Common Lisp, representando las matrices como listas, ¡por supuesto!
Eso porque las personas abordan problemas difíciles usando Lisp, el lenguaje en sí mismo debe ser difícil.
La recursión es difícil . Los puntos fijos de las funciones son difíciles . Pero apenas cubren el capítulo 1 de Estructura e Interpretación de Programas de Computadora . No es porque Scheme sea difícil, en realidad es porque es muy fácil, ¡lo difícil es todo lo que queda por hacer!