gpt4 book ai didi

string - Haskell 无法将预期类型 'String' 与实际类型 'Char' 匹配

转载 作者:行者123 更新时间:2023-12-04 22:48:19 24 4
gpt4 key购买 nike

我想知道为什么我会收到这个错误。这是一个任务,我要从一个整数转换为一个十六进制值。当我将整数值修改为 16 时,我调用此辅助转换函数. (与整数值连接,然后在递归调用中除以 16)

这是我的代码:

    changeToHex :: Integer -> String
--main function

toHex :: Integer -> String
toHex x
|x == 0 = '0'
|x == 1 = '1'
|x == 2 = '2'
|x == 3 = '3'
|x == 4 = '4'
|x == 5 = '5'
|x == 6 = '6'
|x == 7 = '7'
|x == 8 = '8'
|x == 9 = '9'
|x == 10 = 'A'
|x == 11 = 'B'
|x == 12 = 'C'
|x == 13 = 'D'
|x == 14 = 'E'
|x == 15 = 'F'

最佳答案

使用单引号( 'F' )会给你一个 Char文字。对于 String文字,实际上是 Char 的列表值,您应该使用双引号( "F" )。

String[Char] 的别名, 如果你想从 Char 转换到 String ,您可以只包装 Char在单元素列表中。执行此操作的函数可能如下所示:

stringFromChar :: Char -> String
stringFromChar x = [x]

这通常是内联的,如 (:[]) ,相当于 \x -> (x : [])\x -> [x] .

顺便说一句,您可以大大简化您的代码,例如使用 Enum类型类:
toHexDigit :: Int -> Char
toHexDigit x
| x < 0 = error "toHex: negative digit value"
| x < 10 = toEnum $ fromEnum '0' + x
| x < 15 = toEnum $ fromEnum 'A' + x - 10
| otherwise = error "toHex: digit value too large"

更一般地说,任何时候你有这样的功能:
f x
| x == A = ...
| x == B = ...
| x == C = ...
...

您可以使用 case 将其转换为更少重复、更高效的等效项。 :
f x = case x of
A -> ...
B -> ...
C -> ...
...

关于string - Haskell 无法将预期类型 'String' 与实际类型 'Char' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com