我在Haskell中创建了一个Enigma Machine,我对以下代码有疑问:
encrypt :: String -> [String] -> String
encrypt t [d1,d2,d3]
| length t > 1 = encryptOne head t [d1,d3] ++ encrypt (tail t) [d1,rotateF d3]
| length t == 1 = encryptOne head t [d1,d3]
| otherwise = ""
加密函数采用字符串,并使用encryptOne
函数递归地求解每个字符。每次迭代,都使用rotateF
函数旋转转子(早期阶段,仍在解决这个问题)。 encryptOne
函数如下所示:
encryptOne :: Char -> [String] -> Char
问题是encryptOne
头t [d1,d3]
部分,其中头t
无法解决,并且发生以下错误
length t == 1 = encryptOne head t [d1,d3]
^^^^
* Couldn't match type `Char' with `[Char]'
Expected type: [String]
actual type: String
有人知道如何重构此部分,以便头t
返回要在encryptOne
中使用的字符吗?