Saga MCIPFE
O Manual Completamente Incompleto de Programação Funcional com Elixir é uma série de postagens bem pequenas para explicar um pouco de programação funcional.
Cálculo lambda
"No início eram apenas funções"
O cálculo lambda é a abstração de um sistema formal da matemática lógica baseado na substituição e mapeamento de valores, sendo a base do conceito de funções puras que temos hoje.
Usando símbolo λ (lambda), seguido do nome do parâmetro e por fim a expressão.
Uma soma:
add_one = fn(x) -> x+1 end
add_one(2)
#3
No caso acima temos uma função simples que recebe um valor como parâmetro (x) e retorna a soma do parâmetro mais (+) 1, ou seja, substitui (x) por um valor e mapeia para expressão de (+1).
O poder de uma função
Com o conceito simples de mapeamento e substituição é possível construir qualquer coisa inclusive a lógica booleana.
Lógica booleana de forma extremamente resumida é ideia que no universo só existem dois estados Verdadeiro ou Falso, contendo operadores como E, OU e NÃO.
Vamos criar a lógica de Verdadeiro , Falso e o operador Negação.
O conceito de Negação é basicamente a inversão do valor booleano, dessa forma NÃO Falso é igual à Verdadeiro.
lambda_true = fn(x, _) -> x end
lambda_false = fn(_, y) -> y end
lambda_not = fn(bool) ->
bool.(lambda_false,lambda_true) end
print = fn(bool) ->
IO.puts(bool.("true","false")) end
print.(lambda_not.(lambda_true)) #false
print.(lambda_not.(lambda_false)) #true
Já no exemplo acima criamos duas funções true
e false
que recebem dois parâmetros x
e y
, a função true
retorna somente o parâmetro x
e a função false
retorna somente o parâmetro y
.
Para a negação
precisamos criar uma outra função que mapeie uma função booleana, true
ou false
, em outra função booleana invertida.
Conclusão
Mas qual a função do cálculo lambda no dia à dia? O cálculo lambda é a base do que conhecemos hoje como uma função, entender esse conceito, mesmo que de forma mais superficial, é a porta de entrada para entender outros conceitos de programação funcional.
Top comments (0)