¿La "familia" de lenguajes de Lisp está más relacionada que la "sintaxis de tipo C"?

7

Hace poco pensé en la gran variedad de lenguajes lisp, específicamente en el hecho de que, si bien todos tienen una sintaxis similar, y en teoría, todos podrían implementarse desde el mismo pequeño conjunto de funciones primitivas, la forma en que uno usa típicamente cada una lisp puede variar ampliamente en comparación con todos los demás. Me di cuenta de que uno podría hacer la misma afirmación sobre la familia de idiomas con la sintaxis "C-like". Sin embargo, la mayoría de los lenguajes "tipo C" se distinguen entre sí, mientras que es común referirse a "lisp" en general, y no a una variante específica de lisp.

Entonces, ¿son los lenguajes tipo C realmente más diferentes entre sí que los lenguajes tipo lisp? ¿O simplemente aparecen así porque tienen una mayor variabilidad en la sintaxis? ¿Por qué los lenguajes similares a lisp se agrupan más frecuentemente en solo "lisp"? Nadie se referiría nunca a C, C ++, C #, Java como "C".

    
pregunta Ryan Thompson 09.04.2011 - 03:32

2 respuestas

7

Realmente se reduce al uso de las expresiones S de la familia Lisp. Un potente sistema de macros es una característica definitoria de un Lisp, por lo que estas expresiones en S pueden manipularse fácilmente en el momento de la expansión de la macro para, por ejemplo, transformar un programa Common Lisp en un programa de Esquema.

He desarrollado algunos sistemas en los que un requisito explícito era ejecutar tanto en SBCL como en Chez Scheme. Los idiomas son lo suficientemente similares como para que podamos escribir el código en SBCL y luego ejecutarlo en el Esquema cargando un < 200 front-end de línea y cargando los archivos .lisp directamente.

Más importante aún, uno desarrolla patrones particulares de pensamiento al aprender cualquier Lisp que sea directamente transferible al aprendizaje de cualquier otro. El "patrón de diseño" principal de Lisp es pensar en los programas como cosas fluidas que deben manipularse con macros y transformaciones de lista directa. Encontrarás este patrón en cualquier lugar donde encuentres expresiones-S, simplemente porque la homoiconicity lo hace posible.

Por el contrario, los patrones de los lenguajes corsarios no suelen estar dirigidos por las características de un idioma en particular. En cambio, algunos de los idiomas admiten paradigmas generales como OOP, y los programadores en esos idiomas se adhieren a ellos en diferentes niveles dependiendo de sus dominios de problemas.

Esto puede ser un beneficio para la especialización, pero también significa que no hay tanta coherencia incluso entre los programadores de un solo idioma. He trabajado en aplicaciones Java para grandes empresas, pero pídeme que juegue con un programa Java de escritorio grande como OpenOffice Eclipse y básicamente estaría aprendiendo desde cero.

Por lo tanto, diría que la familia Lisp está más estrechamente relacionada, posiblemente debido a la cantidad mucho menor de practicantes de los Lispers, pero también debido a la forma única en que cualquier programador hace pensar a un programador.

    
respondido por el Adam 09.04.2011 - 05:07
1

Los lenguajes "tipo C" varían ampliamente en su semántica y aplicaciones: C y C ++ son lenguajes de sistema de bajo nivel y JavaScript está realmente mucho más cerca de Lisp que de C.

Por otro lado, los lenguajes Lisp (Scheme, Common Lisp, Clojure) están mucho más cerca uno del otro.

    
respondido por el Nemanja Trifunovic 09.04.2011 - 04:24

Lea otras preguntas en las etiquetas