Hoomla

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

Algebraiska effekter

clock mars 16, 2012 08:55 by author kullbom

Vi vet ju alla numera att monader är en både vacker och enormt användbar abstraktion men nu är de dags att gå vidare och ta till sig de algebraiska effekterna. Andrej Bauer och Matija Pretnar har skrivit "Programming with Algebraic Effects and Handlers":        

Eff is a programming language based on the algebraic approach to computational effects, in which effects are viewed as algebraic operations and effect handlers as homomorphisms from free algebras. Eff supports first-class effects and handlers through which we may easily define new computational effects, seamlessly combine existing ones, and handle them in novel ways. We give a denotational semantics of eff and discuss a prototype implementation based on it. Through examples we demonstrate how the standard effects are treated in eff , and how eff supports programming techniques that use various forms of delimited con- tinuations, such as backtracking, breadth-first search, selection functionals, cooperative multi-threading, and others.

PDF finns här. Och diskussion på LTU här

Bli den första att värdera denna post

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


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

Just nu värderat 1.4 av 7 människor

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


Virtuella intressegrupper för F#

clock augusti 12, 2010 15:03 by author kullbom

Gruppen 'F# Sverige' finns nu på både LinkedIn och Facebook.

LinkedIn: http://www.linkedin.com/groups?mostPopular=&gid=3301254

Facebook: http://www.facebook.com/group.php?gid=110066199048889&ref=ts 

Bli den första att värdera denna post

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


The Abstraction Principle

clock maj 12, 2010 19:02 by author kullbom
Avoid requiring something to be stated more than once; factor out the recurring pattern. The pattern then can be used repeatedly by invoking its name.

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


Matematik på nätet

clock november 4, 2009 09:20 by author kullbom

Ytterligare en länkdumpning...

Jag har i dagarna efter en tids paus åter ägnat mig lite åt att försöka lösa problemen på Project Euler.

För vissa av problemen hjälper det att känna till olika matematiska samband och då kan man med fördel konsultera någon av följande siter:

  • PlanetMath.org - PlanetMath is a virtual community which aims to help make mathematical knowledge more accessible.
  • Math Open Reference - Mission: A free interactive math textbook on the web. Initially covering high-school geometry..
  • Wolfram MathWorld - MathWorld™ is the web's most extensive mathematical resource, provided as a free service to the world's mathematics and internet communities as part of a commitment to education and educational outreach by Wolfram Research, makers of Mathematica.

Eller bara helt enkelt Wikipedia.org.

Bli den första att värdera denna post

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


Hjälp på vägen

clock november 4, 2009 08:02 by author kullbom

På samma sätt som alla C#-programmerare idag vet att de egentligen för länge sedan borde ha gått över till F# vet Java-programmerare att de borde gått över till Scala eller ännu hellre OCaml-Java eller liknande.

Tyvärr finns fortfarande programmerare som - av olika skäl - ännu inte haft möjligheten att helt och fullt byta upp sig. Dessa stackare söker givetvis efter stöd av olika former och vi som följer frågeställningarna som dyker upp på t.ex. stackoverflow.com vet att frågan om FP-bibliotek för dessa språk är återkommande.

För de stackars C#-programmerarna finns idag följande hjälp att tillgå:

  • FpSharp - This library provides functional programming abstrations for .NET and C# including map, fold, filter functions for ordinary .NET collections, the option data type, a lazy type, a functional list type, lazy functional lists, and more.
  • Functional C# - This is a set of libraries to demonstrate functional programming aspects as implemented in C#. This is not to imply that C# is a functional language, but can implement some of the aspects of it. This project is to demonstrate some of those techniques
  • Elevate - Elevate is an easy to pick up library containing things you wish were in the BCL. Use one component or many. Contribute your own utilities. Help us make Boost for .NET.
    Elevate is developed in C#. Currently, we're focused on adding concepts from functional languages.
  • Kinet - Kinet is a library for C# that provides useful data structures and algorithms for general purpose programming. It is somewhat inspired by the Functional Java project and the Haskell programming language.
  • Functional .Net - C# 3.0 and VB 9 provide strong elements of functional programming in mainstream languages (lambda expressions, extension methods, a weak version of type inference for local variables, etc.)
    The library support for them, however, is pretty much limited to IEnumerable<T> and LINQ. This project is intended to extend it by providing additional data structures, algorithms, and extension methods.
  • Sasa - Sasa is a collection of useful C# extensions to the standard library. There are tuples, Linq extensions, full MIME e-mail parsing, a POP3 client, array combinators, compact serialization, purely functional lists, lazy types, and more.

Luca Bolognese har också (utan att mig veterligen paketera sin kod) skrivit en läsvärd artikelserien i ämnet: "A C# library to write functional code"(BackgroundTuplesRecordsType Unions och The Match operator).

På Java-sidan finns också vissa möjligheter:

  • Functional Java - Functional Java is an open source library that aims to prepare the Java programming language for the inclusion of closures. It also serves as a platform for learning functional programming concepts [...]
  • FunctionalJ - FunctionalJ is a library which makes it easy to use functional programming constructs in Java code.
  • Jambda - Jambda is an attempt to provide the Java(TM) world with tools and concepts from functional programming (FP). (Här har jag själv haft viss inblanding)
  • LambdaJ - Manipulate collections in a pseudo-functional and statically typed way.
Edit: Lade till "Sasa" till C#-listan

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


Instängd

clock maj 3, 2009 13:30 by author kullbom

Under senare tids programmering i C# har en känsla av instängdhet vuxit sig starkare och starkare hos mig.Jag kommer att tänka på en av de stackars katterna från Lambdacats och tror mig uppleva något liknande. För egen del har jag inte gått så långt att jag känner mig instängd av sidoeffekter i allmänhet. Den ständiga närvaron av null och exceptions är dock minst sagt frustrerande och kan beskrivas som att man konstant befinner sig inuti en Maybe-monad och en Error-monad på en gång utan att ha någon som helst möjlighet att någonsin komma därifrån (en hemsk känsla).

Till och med grundläggande och till synes helt oskyldiga operatorer som +, - och × (för att inte tala om /) är så opålitliga att de låtsas vara fria fast de hör hemma i både en och två monader (Overflow, DivisionByZero etc.).

Även om situationen i Haskell i allmänhet är bättre har man där, t.ex., valt att ha en definition av head av den olyckliga typen [a] -> a. Den skrämmande beskrivningen lyder: “Extract the first element of a list, which must be non-empty.”.

Om man som jag under vissa tider helt har undvikit arrayer av rädsla för IndexOutOfRange skulle man kanske önskat sig en något rimligare typ eller att man helt avstått från en definition av head m.fl.

Vi kan nu antingen acceptera vår eländiga “monadiska situation” och gå medpå att allt av olika skäl kan gå sönder eller - förgäves - fortsätta låtsas som om man med hjälp av Options, Exception-unioner och liknande skall kunna slå sig ut.

Men hur och vad vi än gör så gör vi det hela tiden inifrån de eländiga monaderna. Vi måste ut!

Bli den första att värdera denna post

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


Fyra tidskrifter

clock maj 3, 2009 09:47 by author kullbom

JFP OCaml Journal F# Journal The Monad Reader

Journal of Functional Programming

Journal of Functional Programming is the only journal devoted solely to the design, implementation, and application of functional programming languages, spanning the range from mathematical theory to industrial practice. Topics covered include functional languages and extensions, implementation techniques, reasoning and proof, program transformation and synthesis, type systems, type theory, language-based security, memory management, parallelism and applications. The journal is of interest to computer scientists, software engineers, programming language researchers and mathematicians interested in the logical foundations of programming.

Mycket hög kvalitet från Cambrigde Journals under redaktörerna Matthias Felleisen och Xavier Leroy. Kostar pengar.

The F#.NET Journal

Artiklar om F# av Jon Harrop (författaren till bl.a “F# for Scientists”). Ett axplock:

  • The Essence of Functional Programming
  • Exploiting Tail Recursion
  • Sequence expressions and comprehensions
  • Parser combinators
  • Implementing a simple Ray Tracer
Kostar pengar.

The OCaml Journal

Till viss del samma artiklar som i F# Journal fast utifrån ett OCaml-perspektiv. Kostar pengar.

The Monad.Reader

The Monad.Reader is an electronic magazine about all things Haskell. It is less formal than a journal, but more enduring than a wiki-page or blog post. There have been a wide variety of articles, including: exciting code fragments, intriguing puzzles, book reviews, tutorials, and even half-baked research ideas.

Mycket läsvärd och gratis (även källkoden finns tillgänglig via darcs-repon). I senaste numret (#13) återfinns bl.a. den mycket läsvärda “The Typeclassopedia” av Brent Yorgey.

Bli den första att värdera denna post

  • Currently 0/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


Ordning och reda

clock november 17, 2008 22:39 by author kullbom

Då livet till stor del består av svårigheter och problem är det mycket glädjande när ett av de större problemen plötsligt upphör. Programmet “Papers” är lösningen på ett av de allvarligaste problemen som existerar idag: att hålla reda på just alla “papers” om programmering och programmeringsspråk man samlar på sig.

Papers klarar bland mycket annat av att - med lite hjälp - matcha din samling mot The ACM Portal, CiteSeer.IST, Google Scholar och ett antal andra liknande söktjänster så att allt metadata hålls i gott skick.

Givetvis kan samlingarna också exporteras till olika format och jag hoppas genom detta kunna hålla min lilla länksamling “Intressanta Papers” under bättre kontroll framöver.  

Rekommenderas varmt.

Bli den första att värdera denna post

  • Currently 0/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


I brist på annat

clock oktober 9, 2008 10:55 by author kullbom

Några epigram angående programmering (källa: "Epigrams in Programming" av Alan J. Perlis - SIGPLAN Notices Vol. 17, No. 9, September 1982, pages 7 - 13 [Online]):

A programming language is low level when its programs require attention to the irrelevant.
Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.
It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.
A language that doesn't affect the way you think about programming, is not worth knowing.
If you have a procedure with ten parameters, you probably missed some.

Jim Hornings parafras på den sista är kanske mer aktuell idag:

If you have ten million test cases, you probably missed one.

Bli den första att värdera denna post

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


Teknikbyte

clock oktober 1, 2008 18:56 by author kullbom

Hoomla använder från och med idag inte längre WordPress utan körs nu istället med hjälp av BlogEngine.NET - en lösning skriven i C#.

RSS-feed finns numera under http://blog.hoomla.se/syndication.axd?format=rss

Bli den första att värdera denna post

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


Nödvändig kunskap?

clock augusti 16, 2008 09:30 by author kullbom

Matthias Felleisen (författare till bl.a. “How to Design Programs - An Introduction to Computing and Programming”, “On the Expressive Power of Programming Languages” och “The Design and Implementation of Typed Scheme” - se Intressanta “papers”) har ett intressant uttalande om vad en working programmer behöver ha ett hum om:

A working programmer should have seen:

  • syntax
  • reductions (eval is a function via Church Rosser)
  • scope vs de Bruijn indices
  • beta vs beta-value, normal form [relevant in math] vs value [relevant in cs]
  • basic denotational semantics (typed PCF suffices)
  • typed lc plus type system, SNF
  • extended with some amount of fancy type system stuff (say explicit polymorphism)

That’s approx 10 weeks worth of course material. Or 2 weeks of self-study with a one-hour lunch break.

En bra sammanfattning att utgå ifrån om någon av punkterna känns helt främmande. För egen del skall jag genast ägna lite tid åt vad som menas med denotational semantics.

Bli den första att värdera denna post

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


En glömd monad

clock augusti 11, 2008 20:25 by author kullbom

Efter att precis ha läst om “The Marvels of Monads” av “Yet Another Language Geek” - om monader i C# - insåg jag att den är en av de mer begripliga artiklarna i ämnet och samtidigt en av de få (utanför Haskell-världen) som tar upp de monadiska lagarna.

Bli den första att värdera denna post

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


Tre lokala vävbidrag

clock augusti 11, 2008 16:52 by author kullbom

För att väva ihop hoomla ytterligare lite länkar jag härmed in tre dokument i olika stadier av utveckling:

Bli den första att värdera denna post

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