Os colchetes e as chaves do Clojure ainda são expressões S?

11

Estou tentando aprender Lisp e olhando para todos os Lisps por aí e suas diferenças.

Vejo que, em algumas implementações do Scheme, você pode usar colchetes de forma intercambiável com colchetes para facilitar a leitura, portanto, como são tratados da mesma forma, presumo que ainda sejam apenas expressões S, como todo o resto.

No entanto, no Clojure, vejo que colchetes e chaves são usados ​​para representar diferentes tipos de dados, como vetores e assim por diante. Essas expressões S ainda são válidas ou devem ser consideradas átomos? Isso não "quebra" todo o conceito de expressões S, tornando Clojure um Lisp "impuro"?

mydoghasworms
fonte

Respostas:

10

A notação literal para vetores e mapas (colchetes e chaves) é apenas açúcar em tempo de leitura , e qualquer coisa que você possa representar com essa notação também pode ser representada com expressões S. Como resultado, não há perda de poder ou homoiconicidade, e, de fato, macros de leitor (que eu entendo são ainda mais poderosas) estão disponíveis em vários lisps.

Aliás, observe que o Clojure agora fornece um mecanismo para criar literais "marcados" personalizados, que, como outros literais, são transformados em expressões S antes de serem compilados e interpretados.

tvachon
fonte
1
Mmm, sua resposta me faz pensar que entendo menos do que pensei sobre Lisp. Então, o que você está dizendo (eu acho) é que os colchetes e os colchetes não são, de fato, expressões S. Eu pensei que toda a idéia com a entrada Lisp é que tudo é uma expressão S. Parece que preciso cavar mais algumas vezes antes de voltar a ler sua resposta novamente. Obrigado!
Mydoghasworms
Está correto - eles não são expressões S. A sintaxe Lisp começa com expressões S, na medida em que tudo o que pode ser expresso na linguagem pode ser expresso com expressões S. Mas a sintaxe Lisp não termina aí: muitos compiladores Lisp têm uma fase explícita de leitura de macro, na qual padrões especiais no código-fonte são transformados em expressões S. Isso permite que os autores de idiomas ofereçam aos programadores uma sintaxe amigável ao ser humano. O importante a ser observado é que, como qualquer coisa representada com esses literais especiais também pode ser representada nas expressões S, nenhum dos benefícios da homoiconicidade é perdido.
Tv9
3

Expressões S são uma representação textual para dados. Números, símbolos, células contras, listas, strings, ... Common Lisp também possui representações textuais para matrizes, vetores, mais tipos de números, caracteres, ... Common Lisp também fornece um leitor extensível pelo usuário, para que o usuário possa adicionar mais representações textuais para tipos de dados. Às vezes, esse mecanismo também é usado para alterar a sintaxe da linguagem de programação Lisp (por exemplo, para suportar expressões ou instruções infix de outras linguagens de programação).

Assim, se um dialeto Lisp oferece representações textuais para tipos de dados adicionais, isso se ajusta bem à idéia de expressões s.

Rainer Joswig
fonte