O que torna o cálculo lambda relevante para o estudo?


10

Estou iniciando um curso de graduação em ciência da computação no próximo outono, mas não consigo entender o cálculo λ no contexto da programação funcional. Posso estar interpretando mal isso completamente, mas, com base nessa definição da Stanford Encyclopedia of Philosophy, é apenas mais uma notação para funções.

Se é exatamente isso, por que é vantajoso usar o cálculo λ sobre as notações de funções regulares para calcular o tempo de execução do algoritmo?


5
Não é "apenas mais uma notação para funções", mas "a primeira notação para funções".
21313 Andrej Bauer

Obrigado pela sugestão, @Kaveh. Vou me lembrar disso para posts futuros, no entanto, a resposta de mhelvens é excelente, portanto, não há necessidade de um cruzamento.

É um corpo de objetos formalmente definido. Não vejo qual é o seu problema exato.
Raphael

Eu realmente não entendi a terminologia ou por que as coisas foram feitas, elas são feitas na programação funcional até eu aprender sobre o cálculo lambda. Faz com que as construções de software pareçam muito menos arbitrárias.
dansalmo

Respostas:


13

Em ciência da computação, queremos analisar e entender o código-fonte com rigor matemático. Essa é a única maneira de provar propriedades interessantes (como rescisão) com certeza absoluta. Para isso, precisamos de uma linguagem com um significado muito bem definido para cada construto.

Em teoria, isso poderia ser qualquer linguagem com uma boa semântica formal . Mas, para tornar as coisas menos complicadas e menos propensas a erros, é melhor usar uma linguagem o mais simples possível, mas ainda capaz de expressar qualquer programa (ou seja, Turing está completo ). Para raciocinar sobre códigos imperativos, existem máquinas de Turing . Mas, para raciocinar sobre programação funcional, existe o cálculo.λ

O calcculus básico é como uma linguagem de programação funcional, mas com muita 'bagagem' retirada. Não é importante que seja uma linguagem agradável para escrever programas, nem que seja uma linguagem eficiente. Só que é simples e expressivo. Por exemplo, não precisamos de loops, porque podemos simulá-los com recursão. E não precisamos de funções com vários parâmetros, pois podemos simulá-las com o Currying .λ

Agora, em algum momento, convém provar propriedades sobre construções que não fazem parte do cálculo- básico (sem tipo) . É por isso que os cientistas da computação o estenderam em diferentes direções ao longo dos anos. Por exemplo, para raciocinar sobre sistemas de tipos, existem muitas variações de λ- cálculos digitados .λλ


3
Em resumo, algumas ciências da computação podem entender o código-fonte, mas dizer que isso é verdade em geral soa como dizer que a física significa entender foguetes com rigor matemático. ciência da computação é sobre computação. Uma queixa relacionada é que a eficiência da língua faz importa se você quer estudar a eficiência e código fonte não bem formado. Nesse sentido, é provavelmente melhor para pensar sobre TMs como uma maneira de pensar sobre a eficiência em vez de um modelo de linguagens imperativas (e para ambos os fins a palavra-RAM pode ser uma escolha melhor)
Sasho Nikolov

btw o que eu escrevi acima não não significa que eu não gosto da sua resposta :)
Sasho Nikolov

Acordado. ;-) Corrigido.
Mhelvens

11
Máquinas de Turing são atrozes no raciocínio sobre o código imperativo, é muito mais fácil de usar uma linguagem de brinquedo como um simples enquanto linguagem tipo. stackoverflow.com/questions/507310/the- while-language . As máquinas de Turing continuam sendo muito úteis para insights na teoria da complexidade.
Cody

1

λλ

Se é exatamente isso, por que é vantajoso usar o cálculo λ sobre as notações de funções regulares para calcular o tempo de execução do algoritmo?

há muitas vantagens em usar o Lisp ou a programação funcional e calcular o tempo de execução do algoritmo é apenas uma possibilidade (embora seja útil se você citar uma referência para isso). uma vez que já está em notação funcional, algumas vezes determinar as fórmulas para o tempo de execução via relações de indução ou recorrência pode ter uma relação mais forte ou mais óbvia com o código original. outros tipos de análise do algoritmo também são simplificados.

Outra vantagem principal é a simplicidade sintática. analisadores para outros idiomas são muito complexos, mas os analisadores Lisp são muito simples. então o Lisp é uma ótima linguagem para estudar a teoria da análise.

outro aspecto fundamental é analisar o software mais de uma lente / visão lógica ou matemática, em vez de uma perspectiva "científica do computador".

como a outra resposta aponta, o Lisp é sobre recursão, em vez de iteração, e a recursão está no coração do CS.

λ

[1] Estrutura e interpretação de programas de computador, por Abelson & Sussman

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.