Hoomla

“Symmetry is a complexity reducing concept […]; seek it everywhere.”

F# TextMate bundle v0.4

clock november 3, 2011 13:12 by author kullbom

A new version (v0.4) is now available at http://code.google.com/p/fsharp-tmbundle/

The grammar is slightly improved to handle a few more preprocessor commands, ITerm2 is now supported and the project have switch to git

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


The sieve of Atkin in F#

clock februari 24, 2010 19:07 by author kullbom

From Wikipedia (2010-02-24):

In mathematics, the sieve of Atkin is a fast, modern algorithm for finding all prime numbers up to a specified integer. It is an optimized version of the ancient sieve of Eratosthenes, but does some preliminary work and then marks off multiples of primes squared, rather than multiples of primes. It was created by A. O. L. Atkin and Daniel J. Bernstein.

This is my translation of the pseudocode to f#:

// Generates a list of all primes below limit
let sieveOfAtkin limit =
    // initialize the sieve
    let sieve = Array.create (limit + 1) false
    // put in candidate primes: 
    // integers which have an odd number of
    // representations by certain quadratic forms
    let inline invCand n pred =
        if n < limit && pred then sieve.[n] <- not sieve.[n] 
    let sqrtLimit = int (sqrt (float limit))
    for x = 1 to sqrtLimit do
        for y = 1 to sqrtLimit do
            let xPow2 = x * x
            let yPow2 = y * y
            let n = 4 * xPow2 + yPow2 in invCand n (let m = n % 12 in m = 1 || m = 5)
            let n = 3 * xPow2 + yPow2 in invCand n (n % 12 = 7)
            let n = 3 * xPow2 - yPow2 in invCand n (x > y && n % 12 = 11)
    // eliminate composites by sieving
    let rec eliminate n =
        if n <= sqrtLimit 
        then if sieve.[n]
             then let nPow2 = n * n
                  for k in nPow2 .. nPow2 .. limit do
                      Array.set sieve k false
             eliminate (n + 2)
    eliminate 5
    // Generate list from the sieve (backwards)
    let rec generateList acc n =
        if n >= 5 then generateList (if sieve.[n] then n :: acc else acc) (n - 1)
        else acc
    2 :: 3 :: (generateList [] limit)

On my MacBook Pro 2.66 GHz Intel Core 2 Duo it generates all primes below 10.000.000 in 557 milliseconds:

> #time;;

--> Timing now on

> sieveOfAtkin 10000000;;
Real: 00:00:00.557, CPU: 00:00:00.471, GC gen0: 0
val it : int list =
  [2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47; 53; 59; 61; 67; 71;
   73; 79; 83; 89; 97; 101; 103; 107; 109; 113; 127; 131; 137; 139; 149; 151;
   157; 163; 167; 173; 179; 181; 191; 193; 197; 199; 211; 223; 227; 229; 233;
   239; 241; 251; 257; 263; 269; 271; 277; 281; 283; 293; 307; 311; 313; 317;
   331; 337; 347; 349; 353; 359; 367; 373; 379; 383; 389; 397; 401; 409; 419;
   421; 431; 433; 439; 443; 449; 457; 461; 463; 467; 479; 487; 491; 499; 503;
   509; 521; 523; 541; ...] 

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


F# TextMate bundle v0.3

clock januari 8, 2010 15:59 by author kullbom

A new version (v0.3) is now available at http://code.google.com/p/fsharp-tmbundle/

The grammar now recognize "(*)", "let rec" and "let inline".

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Lisp i F#

clock juli 28, 2009 08:05 by author kullbom

F# är bra till mycket och duger alls inte bara till att skriva kompilatorer för pi-calculus i...

Enligt Tim Robinson kan man även skriva en Lisp-kompilator:

Intressant läsning även om jag personligen blir skeptisk varje gång lex och yacc nämns. Kanske har jag inte helt greppat problematiken men jag har svårt att acceptera att man skulle behöva något annat än "vanliga" parser-kombinatorer som de i FParsec.

Just nu värderat 3.0 av 1 människor

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Kompilatorer i F#

clock april 22, 2009 07:59 by author kullbom

Ola Bini på ThoughtWorks postade igår om att han portat sitt Ioke från JVM till CLR. Han passade på att skriva en serie poster om erfarenheterna från portingen (Some .Net Reflections.Net and Interface madness och Opinions on C# and .Net) där det framgår att han delvis använt sig av F# i arbetet (Opinions on F#). 

Då jag ofta själv lekt med tanken på att skriva ett språk i F# googlade jag vidare lite på ämnet och stötte på artikelserien “Writing a pi-calculus compiler in F#” (π-calculus) av Dominic Cooney.

Mycket spännande.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


F# TextMate bundle

clock november 19, 2008 08:26 by author kullbom
TextMate Bundle

Since my F# grammar and the simple support for the F# interactive (fsi) seems to be quite popular I have now created a project for it on Google Code:

   http://code.google.com/p/fsharp-tmbundle/

I will publish instructions on how to use it and its dependencies there.

Just nu värderat 4.0 av 1 människor

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Salsa: .Net från Haskell

clock oktober 10, 2008 16:20 by author kullbom

Idag annonserade en Andrew Appleyard Salsa: A .NET Bridge for Haskell på Haskell Cafe.

Projektet ser ut att vara en del av hans Bachelor of Science (under ledning av Manuel M. T. Chakravarty):

   A .NET Bridge for Haskell: Dancing with the Devil

...vars abstract får beskriva det hela:

Libraries are essential for software development in any language. Access to the extensive collection of high-quality libraries provided by the Microsoft .NET Framework is, understandably, something that many programmers require. This thesis addresses the challenge of providing access to .NET libraries from Haskell by developing a runtime bridge, called Salsa, between their respective runtime systems. In doing this, a new technique for binding object-oriented subtyping and method overloading in Haskell was developed, which is type safe and has a convenient syntax.

(Sedan tidigare fanns HOC: A Haskell to Objective-C Binding - sida hos Google Code - med liknande syfte...)

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5