Eu entendo o que é, mas não vejo como isso serve para algoritmos ou algo assim. Talvez esteja faltando alguma coisa. Preciso que alguém me dê um exemplo de como ele pode ser usado para que eu possa entender melhor.
Eu entendo o que é, mas não vejo como isso serve para algoritmos ou algo assim. Talvez esteja faltando alguma coisa. Preciso que alguém me dê um exemplo de como ele pode ser usado para que eu possa entender melhor.
Respostas:
A aplicação óbvia do cálculo lambda é qualquer linguagem de programação funcional (por exemplo, Lisp, ML, Haskell) e qualquer linguagem que suporte funções anônimas.
Quanto ao cálculo combinador, deve haver uma "aplicação do mundo real"? Máquinas de Turing, por exemplo, quase nunca são usadas "no mundo real", mas formam a base da teoria da computação. Uma característica útil dos cálculos combinadores é que eles são sistemas mais simples do que, por exemplo, máquinas de Turing. Se você quiser provar que algum outro sistema está completo com Turing, pode ser mais fácil mostrar como ele pode simular combinadores do que mostrar que pode simular uma máquina de Turing.
Achei o SKI útil para entender alguns axiomas lógicos.
Por exemplo, uma axiomatização no estilo Hilbert de implicação (intuicionista) é
A primeira vez que vi esses axiomas, me perguntei por que diabos eles deveriam funcionar. Claro, é fácil verificar se eles aguentam. Mas por que isso deveria ser suficiente, ou seja, por que usar esses dois postulados sozinhos é suficiente para provar (através do modus ponens) todas as outras tautologias implicacionais? Mistério ... ou é?
Bem, acontece que toda tautologia deve corresponder ao tipo de termo lambda, graças ao isomorfismo de Curry-Howard. Mas o referido termo lambda pode ser reescrito de forma equivalente em termos de combinadoressozinho. Então, os tipos de e deve gerar, por meio da aplicação, os tipos de qualquer tautologia. E, de fato, os dois axiomas acima são os tipos mais gerais para e .
Dê uma olhada no LINQ (Consulta Integrada ao Idioma) da Microsoft. Faz uso extensivo e bastante direto do cálculo lambda para manipular e transformar árvores de expressão. Provavelmente, o exemplo mais completo e sofisticado seria o Linq2SQL (a implementação do SQL Server), que efetivamente realiza transformações complexas que segregam as partes da árvore de expressão que podem ser delegadas ao servidor de banco de dados.
Essa dificilmente é a primeira tecnologia que permite consultas que combinam dados de várias fontes, mas pode ser a primeira que automatiza o desembaraço de dependências para aproveitar os recursos de manipulação em massa dos servidores de banco de dados. Não é perfeito (às vezes você tem que ajudá-lo), mas faz o grunhido funcionar muito bem e com uma atenção aos detalhes que você não obterá dos seres humanos.
Quando você não tem que ajudá-lo, entender o cálculo levará um longo caminho para descobrir o que está incomodando-lo - portanto, além de que serve isso? há sua resposta para Por que eu tenho que aprender isso quando as máquinas fazem isso por mim?