haskell Неисчерпывающие шаблоны в коде функции - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в Haskell… я пытаюсь написать функцию short :: String -> String, которая кодирует строку, содержащую только следующие символы:

moni :: Char -> String
moni 'm' = "01"
moni 'o' = "1"
moni 'n' = "001"
moni 'i' = "11"
short :: String -> String
short x = moni 'x'        -- here i try that short m = "01" but it doesn´t work…. why?)
in ghci: 
short m        -- error variable not in scope 
short "m"      -- error Non-exhaustive patterns in function code

В конце концов функция short должна возвращать только строку битов… пример «omi» должен выдавать «10111» ....

1 Ответ

4 голосов
/ 05 апреля 2020

Если вы пишете 'x', вы не используете переменную x, вы использовали символьный литерал .

Если вы хотите «распаковать» "строка, такая, что вы получаете единственный символ, тогда вы можете использовать:

short :: String -> String
short <b>[x]</b> = moni x

, поскольку String - это просто список Char с. Но вышеупомянутое не будет работать для строки без символов или двух или более. Если вы хотите сопоставить каждый символ с moni эквивалентом и объединить результат, вы можете использовать concatMap:

short :: String -> String
short = <b>concatMap</b> moni
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...