为什么这个递归函数在我的haskell之谜模拟器中不起作用?

oknrviil  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(164)

--将信件通过转子传递::字符-〉转子-〉内部-〉字符通过转子偏移=第一个转子!!(α位置a +偏移)
--将反射的字母通过转子反向传递::字符-〉转子-〉内部-〉字符反向通过B偏移=['A'..'Z']!!(磁头((元素索引b(第一个ro)))+偏移)

yyhrrdl8

yyhrrdl81#

问题似乎在于,在passreversePass中,没有任何内容将索引限制在0到25的范围内。例如,在:

pass a rotor offset = fst rotor !! (alphaPos a + offset)

如果a是字符'Z',那么alphaPos a是25,如果偏移量是任意正数,索引将〉= fst rotor的长度,并且将得到一个错误。
要修复此问题,您可以尝试:

pass a rotor offset = fst rotor !! ((alphaPos a + offset) `mod` 26)

对于reversePass具有类似修复。

相关问题