Programmieren mit FreePascal

Smalltalk
Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Beitrag von weedy » 29.03.2004 14:52:53

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.

Antworten