# Posts tagged Functional Programming

## Project Euler Problem 22

0Whilst trying Project Euler problems, I often write a prototype in Python before trying out an implementation in Haskell.

This problem however was screaming for “Functional Programming”.

In fact this time around, I started with a Haskell implementation and went on to translate to Python just for kicks. 🙂

Suffice to say, I am very pleased with myself. 😀

import Char

import List

names = [<List of names from problem specification>]

{- For each string s in list, Calculate sum of the characters’ alpha positions -}

sumChars :: [String] -> [Int]

sumChars [] = []

sumChars (x:xs) =

(foldl (\acc ltr -> acc + (ord(ltr)-ord(‘A’) + 1)) 0 x) : sumChars xs

main = do

let sortedNames = sort(names)

let zippedSumAndIndex = zip [1 .. length(sortedNames)] (sumChars sortedNames)

let total = foldl (\x y -> x + fst(y) * snd(y)) 0 zippedSumAndIndex

print total

## More Haskell…

0So today, I was pondering How difficult it’d be to implement the Sieve of Eratosthenes in Haskell.

Turns out, very easy after all.. and more elegant.

sieve [] = []

sieve (x:xs) = x : sieve [p | p <- xs, p `mod` x /= 0]

So With that figured out, A new challenge was to solve this for any n. O’course, my earlier much simpler solution would have sufficed –

foldl (lcm) 1 [1..20]

But that doesn’t quite use my own implementation of the Sieve of Eratosthenes algorithm, does it?

So that needed to be corrected 😉

So here’s my solution –

## For the love of Haskell…

0Haskell never fails to impress even the mediocre programmer in me.

Here’s something I have attempted solving using Haskell.

Problem –

Find the sum of all the even-valued terms in the Fibonacci sequence which do not exceed four million.

(Source: Project Euler problem 2)

(more…)

## Look mom.. My first Haskell code

0These days I am trying my hardest to learn Haskell.

Found these 2 great online resources Real World Haskell and Learn You a Haskell.

An attempt to solve a rather simple problem from codechef took me close to 2 days.

Not due to the lack of looping constructs..

Nor because I cannot think recursively.

But primarily due to the fact that Haskell doesn’t make it easy to mix pure and impure code.

It took me quite a while to understand that a little monadic constructs such as mapM, forM exists. And the let bindings for sprinkling pure code in between impure code.