import Data.Char
shift :: Int -> Char -> Char
shift n c | isLower c = int2let((let2int c + n) `mod` 26)
| otherwise = c
let2int :: Char -> Int
let2int c = ord c - ord `a`
int2let :: Int -> Char
int2let n = chr(ord `a` + n)
这是凯撒密码的代码,我在解析行int2let :: Int -> Char
时遇到问题。我不确定为什么会出错。
答案 0 :(得分:2)
其他人在评论中指出了这一点,但我想我还要解释一下。
Haskell解释器在这里很有用。让我们尝试看看什么类型的 “ a”是。
$ ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude> :t `a`
<interactive>:1:1: error: parse error on input ‘`’
那不是很好...让我们尝试使用单引号和双引号
Prelude> :t 'a'
'a' :: Char
Prelude> :t "a"
"a" :: [Char]
因此
let2int :: Char -> Int
let2int c = ord c - ord `a`
int2let :: Int -> Char
int2let n = chr(ord `a` + n)
应该是
let2int :: Char -> Int
let2int c = ord c - ord 'a'
int2let :: Int -> Char
int2let n = chr(ord 'a' + n)
作为参考,这里是infix operator
上的一些文档