Also habe ich die folgende Funktion entwickelt, um zu sehen, ob eine gegebene Zahl eine Primzahl in Haskell ist (sie nimmt an, dass die erste Primzahl 2 ist):
%Vor%es hat den offensichtlichen Fehler, die Auswertung fortzusetzen, selbst wenn es durch mehrere Zahlen teilbar ist :(. Gibt es eine gesunde Möglichkeit, die Auswertung zu "schneiden", wenn mehr als eine Lösung gefunden wird list comprehensions?
Welche anderen Implementierungen würden Sie auch anprobieren? Ich bin nicht auf der Suche nach Leistung hier, ich versuche nur zu sehen, ob es andere "haskellische" Wege gibt, dasselbe zu tun.
Eine schnelle Änderung an Ihrem Code, die die Auswertung "kurzschließt" und auf der Faulheit der Haskell-Listen beruht, ist:
%Vor% Der erste Divisor von k
bewirkt, dass die Liste nicht leer ist und die Haskell-Implementierung von null
wird nur auf das erste Element der Liste schauen.
Sie sollten nur bis zu sqrt (k) jedoch [1]:
überprüfen %Vor%Wenn Sie einen leistungsstarken Primzahltest durchführen möchten, ist eine Bibliothek bevorzugt.
[1] Ссылка
Hier ist die beste Ressource für Primzahlen in Haskell in haskell.org
und hier prime.hs github-Projekt
Das ist vielleicht nicht direkt relevant, aber zum Thema Primzahlen in funktionalen Sprachen fand ich Melissa E. O'Neills Das echte Sieb von Eratosthenes ist sehr interessant.