我创建了一段代码:
intToDigit :: Char -> Int
ord :: Char -> Int
intToDigit c = ord c - ord 'a'
然而,当我运行它时,我收到此错误消息:
ChangeVowels.hs:2:1: “ord”的类型签名缺少附带的绑定
ChangeVowels.hs:4:16:不在范围内:`ord'
ChangeVowels.hs:4:24:不在范围内:`ord'
我用Import data.char
尝试过,但这也不起作用。
答案 0 :(得分:17)
您需要为函数ord
提供实现。 在这里,您已为ord
提供了签名,但没有实施。
或者您可以使用Haskell自己的ord
函数,即Char.ord
。
答案 1 :(得分:5)
删除该行:
ord :: Char -> Int
或者给它一个定义。
将函数命名为intToDigit是一个坏主意,而在Data.Char中已经使用它来做与你正在做的相反的事情。
您的函数是Data.Char.digitToInt,其实现也适用于十六进制:
digitToInt :: Char -> Int
digitToInt c
| isDigit c = ord c - ord '0'
| c >= 'a' && c <= 'f' = ord c - ord 'a' + 10
| c >= 'A' && c <= 'F' = ord c - ord 'A' + 10
| otherwise = error ("Char.digitToInt: not a digit " ++ show c) -- sigh
实际上,这不是您定义的...为什么代码中有'a'
?