Как определить диапазон натуральных чисел как символов в Haskell? - PullRequest
1 голос
/ 14 марта 2019

Я пытался:

['1','2',..]

, но это учитывает и другие символы.Я мог бы сделать [1,2 ..], но для моего приложения мне нужно проверить следующее:

  filter (\x -> x `notElem` ['0','1'..]) "a 1 255 d e 6 g h" 

, который в данном случае пытается отфильтровать все элементы, включая пробелы, которые не являются натуральными числами 'символы.

1 Ответ

4 голосов
/ 14 марта 2019

Как в комментариях есть несколько способов:

Последовательность натуральных чисел как 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...