Seite 3 von 3

Verfasst: 29.03.2004 14:52:53
von weedy
DavidJ hat geschrieben:Die Python-Interessierten können damit vielleicht was anfangen, war heute auf OSNews.com verlinkt: http://www.python.g2swaroop.net/
Also ich bin jetzt erstmal auf Haskell hängengeblieben. Es gibt da eine wunderschöne Seite, auf der eine beträchtliche Anzahl von Möglichkeiten gezeigt werden, wie man die Fakultät realisieren kann. Ein wahrer Leckerbissen:

http://www.willamette.edu/~fruehr/haske ... ution.html

Ausschnitt ohne Kommentare:

Code: Alles auswählen

fac1 n = if n == 0
         then 1
         else n * fac1 (n-1)

fac2 = (\(n) ->
         (if ((==) n 0)
          then 1
          else ((*) n (fac2 ((-) n 1 )))))

fac3 0 = 1
fac3 (n+1) = (n+1) * fac3 n

test1 (n+1) = n -- (test1 4) liefert 3

fac4 0 = 1
fac4 n = n * fac4 (n-1)

fac5 n = foldr (*) 1 [1..n]

fac6 n = foldl (*) 1 [1..n]

fac7 n = foldr (\x g n -> g (x*n)) id [1..n] 1

facs8 = scanl (*) 1 [1..]
fac8 n = facs8 !! n

fac9 = foldr (*) 1 . enumFromTo 1

facA n = result (forA init next done)
         where init = (0,1)
               next   (i,m) = (i+1, m * (i+1))
               done   (i,_) = i==n
               result (_,m) = m

forA i n d = until d n i

facB n = snd (until ((>n) . fst) (\(i,m) -> (i+1, i*m)) (1,1))


facAccC a 0 = a
facAccC a n = facAccC (n*a) (n-1)

facC = facAccC 1

facCpsD k 0 = k 1
facCpsD k n = facCpsD (k . (n *)) (n-1)

facD = facCpsD id

yE f = f (yE f)

facE = yE (\f n -> if (n==0) then 1 else n * f (n-1))

-- facF --- ausgelassen

arbG = ()    -- "undefined" is also a good RHS, as is "arb" :)

listencG n = replicate n arbG
listprjG f = length . f . listencG

listprodG xs ys = [ i (x,y) | x<-xs, y<-ys ]
                 where i _ = arbG

faclG []         = listencG  1
faclG n@(_:pred) = listprodG n (faclG pred)

facG = listprjG faclG


main = do print (test1 4)
          print (fac2 4)
          print (fac5 4)
         

Das Teil ist so Kompilierbar, wer lust hat, es auszuprobieren. (Compiler,Package ghc6)

weedy.