Eu tentei entender a diferença entre Lisp-1 e Lisp-2 e como isso se relaciona com Clojure, mas ainda não entendi direito. Alguém pode me esclarecer?
94
De acordo com a wikipedia :
Se um namespace separado para funções é uma vantagem, é uma fonte de contenção na comunidade Lisp. É normalmente referido como o debate Lisp-1 vs. Lisp-2. Lisp-1 se refere ao modelo de Scheme e Lisp-2 se refere ao modelo de Common Lisp.
É basicamente sobre se variáveis e funções podem ter o mesmo nome sem conflito. Clojure é um Lisp-1, o que significa que não permite que o mesmo nome seja usado para uma função e uma variável simultaneamente.
list
é freqüentemente usado como um parâmetro de função e ninguém coisas, meu Deus, isso é tão confuso, pois(list ...)
é uma função padrão. Muitas funções que têmlist
como variável não usam alist
função, ou não a usam perto dessa variável. Mesmo quando isso acontecer não é muito ruim:(list foo list)
. Isso não é mais confuso do que uma frase como "lute pelo bom combate", em que a mesma palavra aparece como substantivo e verbo.Você pode gostar de ler este artigo de Richard Gabriel. É um resumo das questões que a comunidade Lisp estava discutindo em Lisp1 vs Lisp2. É um pouco denso e lento nas primeiras seções, mas é muito mais fácil de ler quando você passa da seção 5.
Basicamente, Lisp1 tem um único ambiente que mapeia símbolos para valores, e esses valores podem ser "regulares" ou funções. Lisp2 tem (pelo menos) dois namespaces (os símbolos têm um slot para seu valor de função e outro para um valor regular). Portanto, em Lisp2, você pode ter uma função chamada foo e um valor chamado foo, enquanto em Lisp1, o nome foo pode se referir apenas a um único valor (função ou outro).
Existem várias compensações e diferenças de gosto entre os dois, mas leia o jornal para obter os detalhes. O livro de Christian Queinnec, "Lisp in Small Pieces", também discute as diferenças tecidas ao longo do texto.
fonte
funcall
efunction
. Eles desaparecem em um Lisp-1.