DEV Community

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

Posted on

6 3

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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay