Recentemente, refatorei grandes pedaços de código e os substituímos por consultas Linq.
Removendo o viés de idioma - Linq é essencialmente um conjunto de operações de Mapa / Filtro e Redução que operam em uma sequência de dados.
Isso me fez pensar em quão longe eu teoricamente seria capaz de levar isso. Eu seria capaz de reescrever toda a base de código em uma série (ou até uma única) de operações Map / Filter e Reduce.
Infelizmente, sou pago para fazer coisas úteis, portanto não pude experimentar muito mais, mas não consigo pensar em nenhuma estrutura de código que não pudesse ser reestruturada como tal. O código lateral afetado pode ser tratado por mônadas. Até a saída está essencialmente mapeando endereços de memória para endereços de tela.
Existe algo que não possa ser (teoricamente) reescrito como uma consulta Linq?
fonte
my_list.map(_ignored => a copy of my_list)
, parece que o uso do espaço de um programa desse tipo é limitado por algum polinômio (dependendo da duração do programa). Então, esse idioma certamente não poderia computar problemas que não estão no PSPACE. No entanto, como muitos problemas no PSPACE são considerados intratáveis, para não falar de classes maiores, isso pode não ser uma restrição muito séria.Respostas:
É chamado de programação funcional e é considerado por muitos como um conceito fundamental. Aqui está uma boa introdução sobre o Joel On Software . A resposta mais técnica é não, atualmente não existe uma maneira conhecida de fazer perguntas ao seu computador (de uma maneira bem definida) que não possam ser respondidas através do cálculo do SKI.
fonte
map
,filter
ereduce
(isso triplicará se ignorarmos a integridade e usarmos linguagens FP práticas). De fato, eles são bastante gerais e, portanto, geralmente úteis, mas na verdade são aplicações muito simples de programação funcional. O cálculo lambda mínimo desencapado pode definir essas funções entre muitas outras, e não o contrário.