Files
TDT4165/assignment4/main.oz
2025-10-28 14:18:31 +01:00

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