[quote=pcalcado][quote=Thiagosc]
Lisp É funcional
[/quote]
Não. Lisp é uma linguagem inventada em 1950 que originou uma miríade de linguagens parecidas. Lisp não é (era) funcional. Common Lisp não é funcional -tem a special form set para começo de conversa. Linguagens puramente funcionais não têm estado mutável.[/quote]
Não há nenhum special form “set” em Common Lisp. Existe uma “setq” para atribuição que não é tão usada assim, assim como em Scheme existem outras formas de se fazer a mesmas coisa (i.e., atribuição em escopos léxicos ou dinâmicos). Se Scheme é funcional então Lisp é funcional.
Uma linguagem puramente funcional, i.e., completamente sem efeitos colaterais e cujas funções retornam sempre os mesmos valores para os mesmos parâmetros, seria inútil. Pode ser interessante do ponto de vista acadêmico e matemático para se testar algoritmos, mas se queremos desenvolver produtos comercializáveis precisamos de efeitos colaterais. Exemplos de efeito colateral: um jogo de computador que altera o estado da memória para exibir diferentes tipos de imagens, uma aplicação que altera estruturas de dados para assim poder exibir um relatório, etc.
[quote=pcalcado]
Essa fase mostra que você está fazendo uma confusão enorme entre Common Lisp (uma linguagem da família, assim como Scheme é outra linguagem da mesma família) e a família de linguagens Lisp. Além disso eu não falei em lugar algum que CL ou Lisp não possuem macros então seu comentário está, no mínimo, fora de contexto.[/quote]
Common Lisp não é linguagem, mas sim uma especificação.
A família de linguagens Lisp conta com muitos dialetos cujas principais features foram reunidas no que se denominou “Common Lisp”. A especificação surgiu justamente para se definir um denominador comum entre os Lisps, mas nada impede que diferentes implementações tenham features extras.
Um Lisp sem CLOS, sem condition system, sem macros, sem “loop” não é Lisp, pois geralmente essas são as features mais reconhecidas por quem desenvolve nessa linguagem.
Portanto se Clojure não conta com essas coisas, não é um Lisp. Pode ser algo inspirado no Lisp, mas diferente. Assim como o criador do Ruby pode ter se inspirado em Scheme, mas Ruby jamais poderia ser considerado da família “Scheme”.
[quote=pcalcado]
[quote=Thiagosc]
Clojure não é Lisp, pois não usa Cons cells[/quote]
Clojure é um dialeto de Lisp. Eu nunca vi nenhuma definição formal do que é ser ou não er parte da família de linguagens mas creio que isso estará muito mais ligado à s-expressions do que com a existência de con (que nada mais é do que uma função que retorna o primeiro elemento de uma lista ligada). Ainda que fosse relevante, Clojure possui os conceitos básicos de lista do lisp original (e, mais uma vez, lisp original != Common Lisp). con é first, car é rest e cons continua cons. Só o menmônico mudou, uma sequence em Clojure é análoga a uma lista em outros Lisps.[/quote]
O que as pessoas se esquecem é nos anos 80 pessoas competentes já criaram o Common Lisp justamente para evitar a fragmentação do mercado. Eles pegaram aquelas features mais importantes encontradas em diversos dialetos e estabeleceram-nas como padrão.
Existem diversas coisas não especificadas (como reflection por exemplo, ou bibliotecas mais abrangentes), mas o núcleo básico é aquele. Cons cells são como o código é construído pelo leitor, o que permite fácil manipulação da estrutura pelo desenvolvedor (é uma árvore/grafo feita de singly linked lists, portanto posso facilmente adicionar novas listas em posições, extendê-la, separá-la em partes, etc). Se um vetor é usado, o que permite acesso direto pelo índice, como posso alterá-lo sem precisar realocar outro vetor de maior ou menor tamanho? Isso é um detalhe de implementação, mas esses detalhes influenciam no desenvolvimento, porque o desenvolvedor em Lisp tem acesso ao código como se fossem dados. Portanto a estrutura dos dados importa.
O Clojure é mais uma tentativa de quem não conhece Lisp de fazer um “Lisp melhor” baseado em suas próprias misconceptions, utilizando-se do nome “Lisp” para se auto-promover e para promover a sua nova linguagem.
[quote=pcalcado]
Claro que ela não implementa ANSI, quem é definido pelo padrão é Common Lisp(uma das linguagens da família) e não Lisp (a família).[/quote]
Common Lisp não é uma linguagem, mas sim uma especificação.
[quote=pcalcado]
Reader macros são macros, então dizer que estão “além de macros” é, no mínimo, estranho.[/quote]
Não, não são. Procure se informar. O Reader no Common Lisp é customizável, pode-se alterar o código que lê os caracteres ou usar novos caracteres com significados diferentes.