First, I created

**FunctionalList<T>**, which can be initialized with a lambda expression. So, where Haskell might have the following:

let squares = [x | a <- [3,6..27], let x = a * a]

show squares

**"[9,36,81,144,225,324,441,576,729]"**

I can now do the following in C#:

FunctionalList<int> squares = HigherOrderFunction<int, int>.Map

(

a => a * a,

FunctionalList.Series(3, 6, 27)

);

Console.WriteLine(squares);

**[9, 36, 81, 144, 225, 324, 441, 576, 729]**

So far, I have implemented the higher order functions Map, FoldLeft and FoldRight, as well as basic functionality for the lists such as Head, Tail, Take, Skip and Construct. I can now do what I said F# should be able to do. For the following Haskell expression:

head $ map' (^2) [9,19..99999999]

I can write in C#:

HigherOrderFunction<int, int>.Map

(

x => x * x,

FunctionalList.Series(9, 19, 99999999)

).Head

head $ map' (^2) [9,19..99999999]

I can write in C#:

HigherOrderFunction<int, int>.Map

(

x => x * x,

FunctionalList.Series(9, 19, 99999999)

).Head

Granted, my C# version is syntactically clunky, but it returns immediately with the correct result. It does not generate a huge in-memory list, and it works by composing the square function (x => x * x) over the function that returns the elements of the underlying series (x => x * 10 + 9).

So there.

## No comments:

## Post a Comment