Primzahlen(Haskell)

Aus IT074-Wiki

Wechseln zu: Navigation, Suche

prim entfernt alle Zahlen, die keine Primzahlen sind aus einer gegebenen Liste.

prim [] = []
prim (x:xs) =
    if x*x > maximum(x:xs) then (x:xs)
    else [x] ++ prim [y | y<-xs, mod y x /= 0]

Legende:

  • [] ist die leere Liste
  • a:L fügt das Element a der Liste L hinzu (immer linksseitig: 1:2:3:4:[] == [1,2,3,4])
  • x:xs bedeutet daher: x (erstes Element der übergebenen Liste) xs (Restliste)
  • ++ verkettet Listen
  • [y | y<-x, z] = Liste von ypsilonen aus der Menge x, die der Bedingung z genügen, Bsp.: [x|x<-[1,2,3], x>1] == [2,3]

Oder:

prim [] = []
prim (x:xs) =
    if x*x > maximum(x:xs) then (x:xs)
    else [x] ++ prim (filter ((/=0).(`mod`x)) xs)

Legende:

  • filter (bed) [liste] entfernt alle Elemente aus der Liste "liste", die der Bedingung "bed" genügen
  • . verkettet Funktionen im Sinne von (g.f)(x) = g(f(x))


Bsp. für Aufruf und Rückgabe dieser Funktion (egal welche beider Varianten) im interaktiven Modus des ghc

*Main> prim [2..100]
[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]

Siehe auch