36 lines
944 B
Plaintext
36 lines
944 B
Plaintext
declare Enumerate GenerateOdd ListDivisorsOf ListPrimesUntil EnumerateLazy Primes in
|
|
|
|
fun {Enumerate Start End} Inner in
|
|
fun {Inner Start End}
|
|
if End == Start then
|
|
Start|nil
|
|
else
|
|
Start|{Inner (Start+1) End}
|
|
end
|
|
end
|
|
thread {Inner Start End} end
|
|
end
|
|
|
|
fun {GenerateOdd Start End}
|
|
thread {Filter {Enumerate Start End} fun {$ N} N mod 2 \= 0 end} end
|
|
end
|
|
|
|
fun {ListDivisorsOf Number}
|
|
thread {Filter {Enumerate 1 Number} fun {$ N} Number mod N == 0 end} end
|
|
end
|
|
|
|
fun {ListPrimesUntil Number}
|
|
thread {Filter {Enumerate 2 Number} fun {$ N} {List.length {ListDivisorsOf N}} == 2 end} end
|
|
end
|
|
|
|
fun lazy {EnumerateLazy}
|
|
% stolen from
|
|
% https://github.com/alhassy/OzCheatSheet?tab=readme-ov-file#lazy-evaluation
|
|
fun lazy {Ints N} N|{Ints N+1} end
|
|
in {Ints 1}
|
|
end
|
|
|
|
fun lazy {Primes}
|
|
{Filter {EnumerateLazy} fun {$ N} {List.length {ListDivisorsOf N}} == 2 end}
|
|
end
|