Моя функция выглядит следующим образом:
minus :: (Eq a) => [a] -> [a] -> [a]
minus [] xs = []
minus (y:ys) xs | y `notElem` xs = y : (minus ys xs)
| otherwise = minus ys xs
Может использоваться следующим образом:
[99,44,55,22,23423] `minus` [55,22]
с выводом: [99,44,23423]
Я написал это, потому чтоЯ смотрю на проблему Проекта Эйлера 7, и Сито Эратосфена кажется правильным инструментом, и так оно и было, но я продолжал читать страницу Википедия и дошел до части о сите Эйлера.*
Я попытался скопировать / вставить код и запустить его в GHCi, но в моей версии GHCi нет модуля с именем Data.OrdList, и я не смог найти функцию с именем minus
в Hoogle.
Это код из Википедии:
import Data.OrdList (minus)
primes = euler [2..]
euler (p : xs) = p : euler (xs `minus` map (*p) (p : xs))
Если я подставлю туда свою минус-функцию, я получу ошибку нехватки памяти, потому что моя функция не ленивая.
Есть ли способ сделать ленивую функцию минус?
Моя функция минус работает так же, как функция минус в статье в Википедии?