DEV Community

Cover image for MCIPFE - Cálculo Lambda
Nathan Branco Caracho
Nathan Branco Caracho

Posted on

MCIPFE - Cálculo Lambda

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:

λx.  x+1(λx.  x+1)22+1=3 \lambda x.\;x + 1 \newline (\lambda x.\;x + 1)2 \newline 2+1 =3

add_one = fn(x) -> x+1 end
add_one(2)
#3
Enter fullscreen mode Exit fullscreen mode

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.

true=λx.λy.  xfalse=λx.λy.  y(λb.  b  false  true)true(true  false  true)=false(λb.  b  false  true)false(false  false  true)=true true = \lambda x.\lambda y. \;x \newline false = \lambda x.\lambda y. \;y \newline (\lambda b. \;b \;false \;true) true \newline (true\;false\;true) = false \newline (\lambda b.\; b \;false\; true) false \newline (false\;false\;true) = true
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
Enter fullscreen mode Exit fullscreen mode

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.

Bibliográfia

Top comments (0)