Barry Jay, em seu livro, faz algumas afirmações ousadas - basicamente dizendo que, no centro de um programa, tudo é atômico ou composto. Então, as coisas podem ser facilmente iteradas, filtradas, atualizadas, apenas navegando nesse relacionamento de composição.
Essa é uma nova fronteira em Ciência da Computação para linguagens de computador - ou estamos apenas voltando ao LISP?
fl.formal-languages
Hawkeye
fonte
fonte
Respostas:
Um dos principais benefícios do trabalho recente de Jay é que ele reduz o código padrão necessário para escrever, a fim de percorrer estruturas de dados para executar operações como o mapa . O cálculo do padrão permite escrever o código transversal uma vez para todas as estruturas de dados e aplicá-lo à sua própria estrutura de dados. Isso certamente reduz a quantidade de código necessária, mas não permite que você escreva nenhum programa que você não poderia escrever. Certamente, existem muitas idéias interessantes no trabalho, mas resta demonstrar que ele realmente funciona.
fonte
Não estou familiarizado com o trabalho recente de Barry Jay, mas seu trabalho mais antigo inclui coisas que você não pode fazer no Lisp, porque os tipos fornecem informações adicionais.
Por exemplo, suponha que você queira definir o tamanho de uma estrutura de dados Lisp. É 1 para um átomo en para uma lista de n átomos e, geralmente, tamanho (x) + tamanho (y) para
(cons x y)
.Agora jogue tipos na mistura. O tamanho de uma lista seria o seu comprimento. Agora, qual é o tamanho de uma lista de listas de átomos? Se você considerar essa estrutura de dados como uma lista (cujos elementos são listas de átomos), a resposta será o tamanho da lista. Se você considerar essa estrutura de dados como contendo átomos que são armazenados em uma lista de listas, a resposta é a soma dos comprimentos das listas de elementos.
Os tipos permitem distinguir entre essas duas visualizações (formas) dos dados brutos. Você precisa de um sistema de tipos que permita discriminar entre (Lista) (Lista Atom) e (Lista Lista) (Atom). A implementação mais comum dessa distinção é com classes de tipo (como em Haskell).
fonte