Estoy tratando de aprender Lisp y estoy mirando todos los Lisps que existen y sus diferencias.
Veo que en algunas implementaciones de Scheme, puede usar corchetes de manera intercambiable con corchetes para facilitar la lectura, por lo que, dado que se tratan de la misma manera, supongo que siguen siendo expresiones S como todo lo demás.
Sin embargo, en Clojure veo que los corchetes y las llaves se usan para representar diferentes tipos de datos, como vectores, etc. ¿Son estas también expresiones S válidas o deben considerarse átomos? ¿No "rompe" todo el concepto de expresiones S, haciendo que Clojure sea un Lisp "impuro"?
Respuestas:
La notación literal para vectores y mapas (es decir, corchetes y llaves) son solo azúcar de tiempo de lectura , y cualquier cosa que pueda representar con esa notación también puede representarse con expresiones S. Como resultado, no hay pérdida de poder u homoiconicidad, y de hecho, las macros de lectura (que entiendo son aún más poderosas) están disponibles en varios ceceos.
Por cierto, tenga en cuenta que Clojure ahora proporciona un mecanismo para crear literales "etiquetados" personalizados, que, como otros literales, se transforman en expresiones S antes de que se compilen e interpreten.
fuente
Las expresiones S son una representación textual de los datos. Números, símbolos, celdas, listas, cadenas, ... Common Lisp también tiene representaciones textuales para matrices, vectores, más tipos de números, caracteres, ... Common Lisp también proporciona un lector extensible por el usuario, para que el usuario pueda agregar más representaciones textuales para tipos de datos. A veces, este mecanismo también se utiliza para alterar la sintaxis del lenguaje de programación Lisp (por ejemplo, para admitir expresiones infijadas o declaraciones de otros lenguajes de programación).
Por lo tanto, si un dialecto de Lisp ofrece representaciones textuales para tipos de datos adicionales, esto encaja bien con la idea de las expresiones s.
fuente