Dictionary “实施中的问题”;托纳姆“;在哈斯克尔
fromEnum没有实现问题,请继续使用toEnum遇到这些问题。尝试了不同类型的SIG,但总是出错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之后,
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])
问候完美的解释!非常感谢。这让我完全明白了。所以:问题为我解决了。很好!,别忘了把问题标为已回答;)