Elemar DEV

Tecnologia e desenvolvimento

Haskell para programadores C# – parte 1 – primeiros passos

Olá pessoal. Tudo certo?!

Programação Funcional é um estilo de programação. Logo, independe da linguagem. Entretanto, fica bem mais fácil e natural utilizando uma linguagem pensada para esse estilo. O que estou dizendo é que é possível “pensar funcional” em C#. Entretanto, é mais natural “pensar funcional” com F# ou Haskell.

De todas as linguagens funcionais que conheço, a que mais me agrada é Haskell. Por isso, decidi escrever essa série.

Nessa série, tento apresentar Haskell sob a perspectiva de um programador C#. Vejamos o que consigo.

Para você começar…

Há algumas alternativas para programar com Haskell. Atualmente, a que mais me agrada é utilizando Hugs. Baixe em haskell.org/hugs.

Conforme o site:

Hugs 98 is a functional programming system based on Haskell 98, the de facto standard for non-strict functional programming languages. Hugs 98 provides an almost complete implementation of Haskell 98.

É levinho. Baixa lá! Executando:

image

Esquentando os motores

OK! Como você escreveria uma função para considerar o somatório de 1 até 100 em C#? Assim?

var soma = 0;
for (var i = 1; i <= 100; i++)
    soma += i;

Vale?! Não?! Uma abordagem mais declarativa seria assim:

Enumerable.Range(1, 100).Sum();

Pois bem, em Haskell seria assim:

sum [1..100]

Pegou!?

Primeiros “de-para”

Haskell torna muito fácil trabalhar com conceitos matemáticos. LINQ foi fortemente inspirado nessa capacidade. Por isso, vamos começar fazendo alguns paralelos entre Haskell e LINQ.

head/First

C#

new[] {1, 2, 3, 4, 5}.First();

Haskell

head [1,2,3,4,5]

ou ainda

head [1..5]

Pegou a idéia?! Lindo, não?!

tail/Skip(1)

C#

new[] {1, 2, 3, 4, 5}.Skip(1);

Haskell

tail [1..5]

O que podemos notar é que:

C#, por ser uma linguagem orientada a objetos, coloca o “objeto” em destaque. Repare, a instrução começa com o objeto. Haskell, por outro lado, coloca a função em primeiro lugar.

Percebe?!

drop n/Skip(n)

C#

new[] {1, 2, 3, 4, 5}.Skip(3);

Haskell

drop 3 [1..5]

length/Count()

C#

new[] {1, 2, 3, 4, 5}.Count();

Haskell:

length [1..5]

sum/Sum()

C#

new[] {1, 2, 3, 4, 5}.Sum();

Haskell

sum [1..5]

product/Aggregate(a, b => a * b)

C#

new[] {1, 2, 3, 4, 5}.Aggregate((a, b) => a*b);

Haskell

product [1..5]

++/Union

C#

new[] {1, 2, 3}.Union(new[] {4, 5});

Haskell

[1..3] ++ [4,5]

reverse/Reverse

C#

{1, 2, 3, 4, 5}.Reverse();

Haskell

reverse [1..5]

Por agora, era isso.

15 comentários em “Haskell para programadores C# – parte 1 – primeiros passos

  1. Henrique Ribeiro
    09/06/2012

    Legal. Bem simples. Ah, o endereço do Haskell está errado. Faltou o http:// no link.

  2. Giovanni Bassi
    10/06/2012

    To aqui estudando Haskell e programação funcional também. É um negócio muito legal, mas que eu que vai explode a cabeça da maioria dos programadores.

    • x
      10/06/2012

      Explode a cabeça de quem não conhece cálculo lambda, que existe desde antes da década de 1950.

      • Giovanni Bassi
        10/06/2012

        Ou seja, explode a cabeça da maioria dos programadores de hoje em dia. As teorias da relatividade são de antes do cálculo lambda, e mesmo assim a maioria das pessoas não conhece. Antiguidade de um conceito não significa democratização deste conceito.
        BTW, comentários anônimos são covardes, IMO.

        • Pedro
          13/06/2012

          Quais pessoas não conhecem a teoria da relatividade? Os físicos ou as pessoas que não precisam ou não querem saber desse conceito.
          Quanto mais antiga uma área do conhecimento, mais fácil de encontrar material especializado sobre ela. Tanto nos níveis básicos, quanto em livros especializados. Deste modo, é possível encontrar um vasto material para leigos e para especialistas. Isso não se restringe somente à Física ou à Ciência da Computação. Pela Internet, existem sites de universidades que disponibilizam o conteúdo de suas aulas e, há sites com uma infinidade de artigos sobre computação, com seus mais variados temas. E, por fim, o Wikipedia favorece um direcionamento inicial para qualquer conhecimento que se queira adquirir.

  3. Pingback: Haskell para programadores C# – parte 2 – Aplicação e escrita de funções « Elemar DEV

  4. Bem intuitivo, gostei :-)

    • Muito bom! Parabéns!
      Tem um material no channel 9 bem legal também pra quem não tem problema com inglês.

      Comecei a estudar com o material do channel 9 e aprendi bastante =)

      Tem uma serie de conhecimentos que temos pouco material em português. Parabéns pela iniciativa de blogar tanto sobre coisas “não triviais” para maioria…

  5. Pingback: Haskell para programadores C# – parte 3 – Tipos! Tipos! Tipos! .. e classes (?!). « Elemar DEV

  6. Pingback: Haskell para programadores C# – parte 4– Respostas condicionais « Elemar DEV

  7. Pingback: F# para programadores C# – Parte 1 | Rodrigo Vidal

  8. Pingback: Haskell para programadores C# – parte 8 – Composition « Elemar DEV

  9. Pingback: Haskell para programadores C# – parte 9 – Modules « Elemar DEV

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às 09/06/2012 por em Post e marcado , , .

Estatísticas

  • 627,205 hits
%d blogueiros gostam disto: