Я новичок в программировании Haskell и не понимаю, как расширяется понимание ниже.
primes = sieve [2..]
sieve (p:xs) = p : sieve [x | x <-xs, x `mod` p /= 0]
Может ли кто-нибудь поправить меня, как работает расширение sieve
:
- Поскольку мы сопоставляем шаблоны в
sieve
,p
будет связываться с2
иx
с[3..]
. - Далее, в понимании списка
x<-3
, но тогда как мы можем называть сито с помощью3
, когда нет короткого замыкания.
Другая вещь, которую я не понимаю, - это то, как здесь работает рекурсия.
Я думаю, было бы ясно, если бы можно было увеличить один шаг за один раз за первые несколько чисел, скажем, до 5
.