Вы не делаете передача что-то функции, как какой-то список. Это обязательное мышление. Что вы делаете в Haskell, вы оцениваете некоторые функции, например. список в качестве аргумента. Обычно вы просто оставляете primes
как есть и используете результат в качестве аргумента для someText
. Как & dagger;,
main :: IO()
main = print (someText $ primes 100)
или просто в РЕПЛ
GHCi> someText $ primes 100
"List starts with2"
Конечно, вы можете также переопределить primes
включить someText
. Но, очевидно, результат будет теперь строкой, а не списком!
primes' :: Integer -> String
primes' n = someText $ sieve [2..n]
where sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p > 0]
Это, вероятно, лучше не делать этого, потому что такая строка довольно бесполезно, когда вы хотите использовать простое список любым другим способом. Вы можете лучше всего вызвать оригинальную primes
функции:
primes' :: Integer -> String
primes' = someText . primes
& кинжал; На самом деле это не работает: ваша функция someText
не является полной. Образец x:[]
только соответствует списку, который имеет ровно один элемент (это более удобно написано someText [x] = ...
). Вы хотите совместить на список, который начинается с одного элемента; сделайте это с рисунком x:_
.
Спасибо, теперь я вижу, что мне нужно больше узнать о Haskell: D – Cardano