解析代码中的错误,但无法发现错误

时间:2019-12-27 16:36:06

标签: haskell

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时遇到问题。我不确定为什么会出错。

1 个答案:

答案 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

上的一些文档