Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save miklund/0b418905ce6d25fc75a4 to your computer and use it in GitHub Desktop.
Save miklund/0b418905ce6d25fc75a4 to your computer and use it in GitHub Desktop.
# Title: Infinite sequence of primes
# Author: Mikael Lundin
# Link: http://blog.mikaellundin.name/2011/08/13/infinite-sequence-of-primes-by-sequence-expressions.html
let isPrime number primes =
let sqrtn = float >> sqrt >> int
primes
|> Seq.takeWhile (fun n -> n <= (sqrtn number))
|> Seq.exists (fun n -> number % n = 0)
|> not
let rec primes =
let isPrime number primes =
let sqrtn = float >> sqrt >> int
primes
|> Seq.takeWhile (fun n -> n <= (sqrtn number))
|> Seq.exists (fun n -> number % n = 0)
|> not
let rec primes' current =
seq {
if primes |> isPrime current then
yield current
yield! primes' (current + 2)
}
seq {
yield 2
yield! primes' 3
} |> Seq.cache
let rec primes' current =
seq {
if primes |> isPrime current then
yield current
yield! primes' (current + 2)
}
seq {
yield 0
yield! [1; 2; 3]
yield! [4; 5; 6]
yield! [7; 8; 9]
}
let rec alternating =
seq {
yield true
yield false
yield! alternating
}
seq {
yield 2
yield! primes' 3
} |> Seq.cache
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment