Kompottkins Weisheiten

••• NEU! Jetzt mit mehr als 3 % Uptime! •••

Monaden in Scala

Ein nichtdeterministisches Programm, zum Beispiel zum Bestimmen aller Faktoren einer Zahl, ist in Haskell schnell geschrieben:

-- A non-deterministic programme that finds all factor pairs of a given number.  
factors :: Integral a => a -> [(a, a)]  
factors = do  
  x <- [1..num]  
  guard $ num `mod` x == 0  
  let y = num `div` x  
  return (x, y) 

In Scala geht das ganz ähnlich:

// A non-deterministic programme that finds all factor pairs of a given number.  
def factors(num: Int) = {  
  for {  
    x <- 1 to num  
    if num % x == 0  
    val y = num / x  
  } yield (x, y);  
} 

Klar, Obiges ist einfach eine Listenkomprehension, aber in der Tat geht das in beiden Sprachen auch über ganz anderen Datentypen, die die jeweils geforderten Schnittstellen implementieren. Auch, wenn die Scala-Schnittstelle rein namensmäßig auf Listen zugeschnitten ist (flatMap für bind, filter für fail), ist die Funktionalität identisch. Nur rein nebenwirkungsorientierte Anweisungen ohne Variablenbindung scheinen in Scala-Komprehensionen nicht möglich zu sein.

Kommentare

(6.8.2009, 19:7) :-p meint:

Kaufen Sie Lispporno! Heute im Angebot! Sexy Monaden implementieren sich auf deiner Festplatte!

Neuen Kommentar schreiben

Bitte beachten Sie, daß E-Mail-Adressen niemals veröffentlicht werden und nur von Matthias eingesehen werden können.

Hinweise: Diese Website verwendet Akismet zur Spamerkennung. E-Mail-Adressen werden auch gegenüber Akismet unter Verschluß gehalten. Nur unformatierter Text ist erlaubt. Leerzeilen trennen Absätze.