Как использовать смайлики в Haskell? - PullRequest
0 голосов
/ 25 октября 2019

Я работаю над тем, чтобы сделать следующее:

a) Реализовать функцию enc :: String -> String, которая преобразует все строчные буквы ASCII в эмодзи и все прописные буквы ASCII в символы, представляющие животных.

b) Реализовать функцию dec :: String -> String, которая реализует обратную функцию, конвертируя эмодзи и символы, представляющие животных, в буквы ASCII.

Я начал делать следующее, чтобы проверить, декодировать или кодироватьна основе ввода:

-- Peek into the content to decide whether we encode or decode.
convert :: String -> String
convert xs
 | null $ filter (\c -> isLetter c && isAscii c) xs = dec xs
 | otherwise = enc xs   

main = do
    contents <- getContents
    putStr $ convert contents

Проблема заключается в том, как использовать смайлики в рабочем процессе haskell. использование смайликов внутри haskell всегда дает мне parse input error, даже когда я использую Data.Char

1 Ответ

1 голос
/ 25 октября 2019

Вопрос не очень хорошо написан, вы не объясните, где ваша проблема.

Вы можете начать с чего-то вроде этого

import Data.Char

toAnimal :: Char -> Char
toAnimal c = chr . (+127970) $ ord c

toSmileyEmoji :: Char-> Char
toSmileyEmoji c = chr . (+128415) $ ord c

encode :: String -> String
encode xs = map (\c -> if isUpper c then toAnimal c else toSmileyEmoji c) xs

fromAnimal :: Char -> Char
fromAnimal c = chr $ (ord c) - 127970

fromSmileyEmoji :: Char-> Char
fromSmileyEmoji c = chr $ (ord c) - 128415

isAnimal :: Char -> Bool
isAnimal c = if ((ord c >= ord '?') && (ord c <= ord '?')) then True else False

decode :: String -> String
decode xs = map (\c -> if isAnimal c then fromAnimal c else fromSmileyEmoji c) xs

main = do
    contents1 <- getLine
    contents2 <- getLine
    putStr $ (encode contents1) ++ "\n" ++ (decode contents2)

Ввод

ABCDEFGHIJKLMNOPQRSTUVWXYZ
??????????????????????????

Выход

??????????????????????????
ABCDEFGHIJKLMNOPQRSTUVWXYZ

https://ideone.com/iePD1a

Смайлики смайликов начинаются с 128512, а смайлики животных начинаются с 128045 (ну, нереальное фактическое «начало», но, по крайней мере, оно может соответствовать букве алфавита). ASCII строчные буквы начинаются с 97 и 65 для прописных. Вам нужно только добавить его, чтобы он стал смайликом, который вы желаете

например

65 [A] + (128045 [?] - 65 [A]) = 128045 [?]
and so on...
...