Skip to content

Instantly share code, notes, and snippets.

@octavioturra
Last active October 6, 2016 05:40
Show Gist options
  • Save octavioturra/55f4dcb6db40e347cb2dfe9be73c822b to your computer and use it in GitHub Desktop.
Save octavioturra/55f4dcb6db40e347cb2dfe9be73c822b to your computer and use it in GitHub Desktop.
Haskell

Haskell


Para aprender algo novo, devemos esquecer conceitos antigos


IF


IF Instituto Federal


Variável


Variável O humor da sua esposa, marido, namorado, rolo... etc


For


For Aquele filme da Marvel


Ok, agora que apagamos conceitos errados


Qual o resultado de F(x) = x + x onde f(2)


Qual o resultado de F(x) = x + x onde f(2) 3


Qual o resultado de F(x) = x + x onde f(2) 4


f(x) = x + x


f(2) = 2 + 2


f(2) = 2 + 2 ∴ 4


f(x) = if x = 2 then 4 else x + 5


f(2) = if 2 = 2 then 4 else 2 + 5


f(2) ∴ 2


f(x) = if x > 0 then x + f(x - 1) else x


f(2) = if 2 > 0 then 2 + f(2 - 1) else 2


f(2) = if 2 > 0 then 2 + f(2 - 1) else 2 ∴ f(2) = if 2 > 0 then 2 + (if 2 - 1 > 0 then (if 2 - 1 - 1 > 0 then ... else 2 - 1 - 1) else 2 - 1) else 2


Ops... bom, daí temos a otimização de rabo...


A otimização de rabo é quando enfiamos os ... e otimizamos as chamadas, pois já sabemos que ela bateu na condição


Falando em rabo


se isso fosse uma centopéia: [0, 1, 2, 3, 4]


[0] = cabeça [1, 2, 3, 4] = rabo...


0 é a cabeça e o resto é o rabo ∴ f(x) = let h = cabeça(x), t = rabo(x) in if t != [] then h + f(t) else h


mas...eita.. e se...


f([cabeça : rabo]) = if rabo != [] then cabeça + f(rabo) else cabeça


mas...ainda da pra mais


f [] = 0
f cabeça = cabeça
f [cabeça : rabo] = cabeça + f(rabo)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment