Проблемы реализации "toEnum" в Haskell - PullRequest
0 голосов
/ 04 июля 2018

не имеет проблем с реализацией fromEnum, продолжайте сталкиваться с ними, используя toEnum. Пробовал разные типы сигов, но продолжаю понимать все неправильно.

decodeROT = map (-1) (map toEnum [74,33,105,57,33,117,112,70,111,118,110])

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Так что, я думаю, вы хотите преобразовать [74,33,105,57,33,117,112,70,111,118,110] в строку, переведя ее на одну позицию, так что она становится "I h8 toEnum" не так ли?

Итак:

  • map toEnum [74,33,105,57,33,117,112,70,111,118,110] является типом String, поэтому, когда вы применяете к нему map (-1), вы на самом деле пытаетесь вычесть Int из Char, и это неправильно!

  • Во-вторых, map (-1) является неправильным выражением, поскольку haskell понимает -1 как действительное число минус один , а не функцию вычитания

Принимая это во внимание, ваш код должен быть:

decodeROT = map toEnum (map ((+) (-1)) [74,33,105,57,33,117,112,70,111,118,110])

Что можно кратко записать как

decodeROT :: String
decodeROT = map (toEnum . (+) (-1)) [74,33,105,57,33,117,112,70,111,118,110])

Привет

0 голосов
/ 04 июля 2018

(-1) в вашем коде должна быть функцией «вычитать единицу», но фактически интерпретируется как константа «отрицательная единица». Поскольку «-1» - это число, оно не является функцией, поэтому возникнут ошибки.

Вы можете использовать pred для функции предшественника, или subtract 1, или явное (\x -> x-1).

Также обратите внимание, что после применения toEnum тип больше не обязательно числовой. pred все еще будет работать, но другие альтернативы могут потерпеть неудачу. Вы должны уменьшить числа перед применением toEnum.

Незначительная точка: map f (map g list) эквивалентно map (f . g) list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...