Как в комментариях есть несколько способов:
Последовательность натуральных чисел как chars
. Также могут быть закодированы только символы от 0
до 9
:
naturalN :: [Char]
naturalN = ['0'..'9']
Пример:
['0'..'9']
=> "0123456789"
Что касается всех натуральных чисел, которые не могут быть закодированы как символы, но как строки. Например:
naturalN :: [String]
naturalN = map show [0..]
Пример:
take 20 naturalN
=> ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"]
Проблема с этим подходом заключается в том, что вы не можете проверить elem
или notElem
, потому что он никогда не завершит вычисления, если условие не будет выполнено, поскольку это бесконечный список. Вам действительно придется использовать ограничение того, что вы ищете.
Тогда проблема в том, как вы пытаетесь отфильтровать строку, что нормально, если вы используете подход первого списка:
filter (\x -> x `elem` ['0'..'9']) "a 1 255 d e 6 g h"
=> "12556"
Или:
filter isDigit "a 1 255 d e 6 g h"
=> "12556"
В случае, если вам нужен опозит, который снимает номера строки:
filter (not.isDigit) "a 1 255 d e 6 g h"
=> "a d e g h"