Как правильно использовать функцию длины в haskell?

#haskell #functional-programming #primes

#хаскелл #функциональное программирование #простые числа

Вопрос:

В настоящее время я работаю над тем, чтобы попытаться найти количество простых чисел между диапазоном в хаскелле. Программа правильно выводит диапазон простых чисел. Например количество отправлений до 2 10 будет распечатано [2, 3, 5, 7]. Я ищу число 4, потому что именно столько простых чисел находится в диапазоне от 2 до 10. Как правильно включить количество простых чисел?

 import Data.List  countPrimesUntil :: Integral a=gt; a -gt; a -gt; [a] countPrimesUntil a b = takeWhile (lt;= b) $ dropWhile (lt; a) $ sieve [2..]  while sieve (n:ns) = n:sieve [m | m lt;- ns, m `mod` n /= 0]  countPrimes n = length([x | x lt;- [2..n], countPrimesUntil x])  

Комментарии:

1. while должно быть where

Ответ №1:

countPrimesUntil это неправильное название; это ничего не значит. Скорее, он создает список простых чисел между a и b включительно.

Все , что вам нужно сделать, это применить length к результату countPrimesUntil , когда даны аргументы 2 и n .

 countPrimes n = length (countPrimesUntil 2 n) -- countPrimes = length . countPrimesUntil 2  

Ответ №2:

В этом случае countPrimes вызовы countPrimesUntil 2 n и определяет их длину , так что:

 countPrimes n = length (countPrimesUntil 2 n)