Der folgende F#-Code liefert die richtige Antwort auf Project Euler Problem #7:
let isPrime num =
let upperDivisor = int32(sqrt(float num)) // Gibt es einen besseren Weg?
let rec evaluateModulo a =
if a = 1 then
true
else
match num % a with
| 0 -> false
| _ -> evaluateModulo (a - 1)
evaluateModulo upperDivisor
let mutable accumulator = 1 // Möchte vermeiden, veränderbare Werte zu verwenden.
let mutable number = 2 // ""
while (accumulator <= 10001) do
if (isPrime number) then
accumulator <- accumulator + 1
number <- number + 1
printfn "Die 10001. Primzahl ist %i." (number - 1) // Fühlt sich holprig an.
printfn ""
printfn "Drücken Sie eine beliebige Taste, um fortzufahren."
System.Console.ReadKey() |> ignore
- Ich möchte die Verwendung der
mutable
-Werte accumulator und number vermeiden. Außerdem möchte ich diewhile
-Schleife in eine endrekursive Funktion umgestalten. Irgendwelche Tipps? - Habt ihr Ideen, wie man das Kludern mit (number - 1) entfernen könnte, um das Ergebnis anzuzeigen?
- Irgendwelche allgemeinen Anmerkungen zu diesem Code oder Vorschläge zur Verbesserung?