我正在从事一个编码项目,我们需要在 Haskell 中编写一个 vigenere cypher。我已经花了几个小时并没有取得什么进展,但我被困在一个特定的部分。到目前为止,这是我的代码:
--Program: VigCipher.hs
--Author: Mouse
import Data.Char
import Text.Printf
--Changes letters to their numerical value
let2int :: Char -> Int
let2int c = ord c - ord 'a'
--Changes numerical values to letters
int2let :: Int -> Char
int2let n = chr (ord 'a' + n)
--Shift letter by n mod 26 places
shift :: Int -> Char -> Char
shift n c | isLower c = int2let ((let2int c + n) `mod` 26)
| otherwise = c
--Encoding function
encode :: String -> String -> [Char]
encode key msg = [shift (26 - let2int (key !! a) | a <- as) (msg !! a) | x <- zip (cycle key)msg]
我的问题出在 Encoding 函数中:我希望该函数在键和应该编码的消息的每个索引处检查和更改字符。我的印象是我所拥有的应该可以工作,但是当我运行它时,由于 | 在:(键!!a)| 一个 <- 作为)。我不知道如何解决这个问题,更不用说如何让程序像我想要的那样检查/更改每个索引处的字母了。有人可以帮忙吗?