Dictionary “实施中的问题”;托纳姆“;在哈斯克尔

Dictionary “实施中的问题”;托纳姆“;在哈斯克尔,dictionary,haskell,Dictionary,Haskell,fromEnum没有实现问题,请继续使用toEnum遇到这些问题。尝试了不同类型的SIG,但总是出错 decodeROT = map (-1) (map toEnum [74,33,105,57,33,117,112,70,111,118,110]) 请帮忙 代码中的(-1)应该是函数“减一”,但实际上被解释为“负一”常量。由于“-1”是一个数字,它不是一个函数,因此会出现错误 您可以对前置函数使用pred,或subtract 1,或显式(\x->x-1) 还请注意,在应用了toEnum之后,

fromEnum没有实现问题,请继续使用toEnum遇到这些问题。尝试了不同类型的SIG,但总是出错

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

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

您可以对前置函数使用
pred
,或
subtract 1
,或显式
(\x->x-1)

还请注意,在应用了
toEnum
之后,类型不再一定是数字
pred
仍然有效,但其他替代方案可能会失败。在应用
toEnum
之前,应先减小数字


小结:
map f(map g list)
相当于
map(f.g)list

所以我猜你想把
[74,33105,57,33117112,70111118110]转换成字符串,把它翻译成一个位置,这样它就变成了
“I h8 toEnum”

因此:

  • map-toEnum[74,33105,57,3311712,70111118110]
    是字符串类型,因此当您对其应用
    map(-1)
    时,实际上是在尝试将Int减去Char,这是错误的

  • 其次,
    map(-1)
    是一个糟糕的表达式,因为haskell将-1理解为实际数减去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])

问候

完美的解释!非常感谢。这让我完全明白了。所以:问题为我解决了。很好!,别忘了把问题标为已回答;)