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.
Comments
Kaufen Sie Lispporno! Heute im Angebot! Sexy Monaden implementieren sich auf deiner Festplatte!
Submit a comment
Note: This website uses a JavaScript-based spam prevention system. Please enable JavaScript in your browser to post comments. Comment format is plain text. Use blank lines to separate paragraphs.