0 people like it.

Euler 1 as a Computation Expression

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
type Euler1Builder() =
    member b.Combine(x, y) = x + y
    member b.Zero() = 0
    member b.Yield(x) = if x % 5 = 0 || x % 3 = 0 then x else 0
    member b.For(vals, f) = vals |> Seq.fold (fun s n -> b.Combine(s, f n)) (b.Zero()) 

let eb = new Euler1Builder()

let pe1_eb limit = eb { for x = 0 to limit - 1 do yield x }
Multiple items
type Euler1Builder =
  new : unit -> Euler1Builder
  member Combine : x:int * y:int -> int
  member For : vals:seq<'a> * f:('a -> int) -> int
  member Yield : x:int -> int
  member Zero : unit -> int

Full name: Script.Euler1Builder

--------------------
new : unit -> Euler1Builder
val b : Euler1Builder
member Euler1Builder.Combine : x:int * y:int -> int

Full name: Script.Euler1Builder.Combine
val x : int
val y : int
member Euler1Builder.Zero : unit -> int

Full name: Script.Euler1Builder.Zero
member Euler1Builder.Yield : x:int -> int

Full name: Script.Euler1Builder.Yield
member Euler1Builder.For : vals:seq<'a> * f:('a -> int) -> int

Full name: Script.Euler1Builder.For
val vals : seq<'a>
val f : ('a -> int)
module Seq

from Microsoft.FSharp.Collections
val fold : folder:('State -> 'T -> 'State) -> state:'State -> source:seq<'T> -> 'State

Full name: Microsoft.FSharp.Collections.Seq.fold
val s : int
val n : 'a
member Euler1Builder.Combine : x:int * y:int -> int
member Euler1Builder.Zero : unit -> int
val eb : Euler1Builder

Full name: Script.eb
val pe1_eb : limit:int -> int

Full name: Script.pe1_eb
val limit : int
Raw view Test code New version

More information

Link:http://fssnip.net/2u
Posted:15 years ago
Author:
Tags: