fromEnum没有实现问题,请继续使用toEnum来解决它们。尝试了不同类型的信号,但一直弄错了。
decodeROT = map (-1) (map toEnum [74,33,105,57,33,117,112,70,111,118,110])
请帮助!
答案 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])
致谢