Решето Эратосфена: Java vs. Haskell
Как говорится, почувствуйте разницу, Java:
import java.util.Arrays;
public class PrimeNumbers {
public static boolean[] getSieve(int n) {
boolean[] primes = new boolean[n + 1];
Arrays.fill(primes, 2, n + 1, true);
for (int i = 2; i * i <= n; i++) {
if (primes[i]) {
for (int k = i * i; k <= n; k += i) {
primes[k] = false;
}
}
}
return primes;
}
}
vs. Haskell:
primes = sieve [2..]
where
sieve (x:xs) = x:sieve (filter ((/= 0).(`mod` x)) xs)
Для кучи, Python (кратко, но уже не так чисто с функциональной точки зрения):
nums = range(2, 50)
for i in range(2, 8):
nums = filter(lambda x: x == i or x % i, nums)
Рубрики:programming
Haskell:
primes = nubBy (((<1) .) . flip mod) [2..]