Erlang: проверять символы при вставке текста, если символы существуют в списке

Я ищу, если вставленный текст содержит символы и целые числа, и если они не в списках символов возвращают false

Пример списка:

List = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

И функция должна иметь 1 значение, например:

check(Text) ->
    List = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"],

если вставка текста выглядит следующим образом:

check("you should have 10 point to do this")

должен возвращать true, потому что каждая вещь в тексте существует в списке

и если вставка текста выглядит следующим образом:

check("you should + have ....")

должен возвращать false, потому что " + " & " . " не существует в списке.


person Mr. zero    schedule 01.04.2016    source источник


Ответы (1)


Обратите внимание, что ваш первый пример check передает строку, содержащую пробелы, которых нет в List, поэтому я предполагаю, что вы хотите обработать это.

Вот один из способов решить эту проблему:

check(Text) ->
    List = "1234567890abcdefghijklmnopqrstuvwxyz \t\n.",
    lists:all(fun(C) -> lists:member(C, List) end, Text).

Во-первых, обратите внимание, что здесь List — это не список строк, как вы указали изначально, а список символов. Я также добавил символы пробела, табуляции, новой строки и точки в List.

Вторая строка check/1 проходит по списку Text символ за символом. Для каждого символа C мы проверяем, является ли он членом List. Если этот тест возвращает истину для всех символов, то lists:all/2 возвращает истину, в противном случае возвращает ложь.

person Steve Vinoski    schedule 01.04.2016