2016-04-30 5 views
2

sie eine Hausaufgabe in Haskell gegeben wurde, in dem ich ein Modul programmiert werden soll, die aus einer Liste erfassen Primzahlen hilft, sagen:durch eine Liste iterieren Primzahlen erkennen

[2,3,4,5,6,7,8,9,10] 

Für die Hausaufgaben, soll ich Iteriere alle Elemente dieser Liste und eliminiere alle ihre Vielfachen. Beispiel, ich gehe auf Nummer 2, ich sollte 4,6,8,10 eliminieren. Dann gehe zu Nummer 3 und lösche 6 und 9, und so weiter bis zum Ende, gib die Liste nur mit Primzahlen zurück.

habe ich eine Idee von Funktion map, aber ich bin an dieser Stelle stecken (I Haskell ziemlich neu bin, obwohl)

Ja, es ist meine Hausaufgaben, aber nein, ich nicht haben es zu tun, es ist nur üben. Also bin ich dankbar für jede Hilfe.

+0

Was Sie beschreiben, ist im Grunde die [* Sieb des Eratosthenes *] (https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). –

+0

Ja ich weiß, ich es mit Java tun könnte, aber nach wie vor Probleme in Haskell mit :) –

+1

Beachten Sie auch, dass es ia ganze Seite am Haskell Wiki für dieses Problem gewidmet ist - https://wiki.haskell.org/Prime_numbers gibt es Viel kann man vom Lesen lernen und es mit mehr Wissen/Erfahrung neu lesen – epsilonhalbe

Antwort

4

Statt eine der Verwendung map (Ich glaube nicht, das möglich ist, ohne eine Vorbearbeitung zu tun), können Sie Ihre eigene Funktion rollen:

sieveWith _ [] = [] 
sieveWith ss (x:xs) | any ((==) 0 . mod x) ss = sieveWith ss xs 
        | otherwise = x : (sieveWith (x:ss) xs) 

und:

sieve = sieveWith [] 

Nun, wenn Sie rufen sieve:

*Main> sieve [2,3,4,5,6,7,8,9,10] 
[2,3,5,7] 

die Funktion mit einem Werk Variable (die erste), die durch die Funktionsaufrufe übergeben wird und jedes Mal, wenn ein Wert ausgewählt wird, der Liste hinzugefügt. Ein Wert wird ausgewählt, wenn keine Modulooperation auf der Variablenliste eine Null ergibt (zweiter Schutz). Wenn any der mod Werte von null ergibt, wird der Wert einfach weggelassen.

+1

Vielen Dank! Ich werde jedoch deine Antworten studieren müssen, weil einige wirklich neu für mich sind. Theoretisch weiß ich nichts über "sonst", "irgendwas" und Wachen, aber ich denke, das ist eine Art Übung, die etwas Graben erfordert. Danke noch einmal ! –

+1

'sonst' ist im Grunde ein Alias ​​für' True' (ist aber für Wächter beliebter). [any] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:any) durchläuft eine Liste, bis sie ein Element findet, das eine gegebene Bedingung erfüllt . –

Verwandte Themen