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