在Haskell中实现“ toEnum”问题

时间:2018-07-04 06:58:00

标签: dictionary haskell

fromEnum没有实现问题,请继续使用toEnum来解决它们。尝试了不同类型的信号,但一直弄错了。

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

请帮助!

2 个答案:

答案 0 :(得分:3)

代码中的(-1)应该是函数“减一”,但实际上被解释为“负一”常量。由于“ -1”是数字,因此不是函数,并且会出现错误。

您可以将pred用于前任功能,subtract 1或显式(\x -> x-1)

还请注意,在应用toEnum之后,类型不再必须是数字。 pred仍然可以使用,但是其他替代方法可能会失败。您应该在应用toEnum之前减小数字。

小数点:map f (map g list)等同于map (f . g) list

答案 1 :(得分:1)

所以我想您想通过将[74,33,105,57,33,117,112,70,111,118,110]转换为一个位置来将它转换为String,所以它变成"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])

致谢