我正在尝试创建一个简单的函数来在Haskell中返回一个居中的文本字符串,但是我很难找到插入任何一侧的填充量.我有这个:
center padLength string = round ((padLength - (length string)) / 2)
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
No instance for (Fractional Int)
arising from a use of '/'
Possible fix: add an instance declaration for (Fractional Int)
In the first argument of 'round', namely
'((padLength - (length string)) / 2)'
In the expression: round ((padLength - (length string)) / 2)
In an equation for `center':
center padLength string = round ((padLength - (length string)) / 2)
Run Code Online (Sandbox Code Playgroud)
我如何(基本上)从Double(我认为)转换为Int?
问题不在于你不能将Double转换为Int - round完成就好了 - 这就是你试图在Int(padLength - length string)上进行除法.错误消息只是告诉您Int不是Fractional可以划分的数字的类型类的实例.
通常,您可以使用fromIntegral (padLength - length string)它将其转换为Double,但在这种情况下,您可以直接使用整数除法:
center padLength string = padLength - (length string) `div` 2
Run Code Online (Sandbox Code Playgroud)
a `div` b只是一种更好的写作方式div a b; 你可以使用任何函数作为这样的二元运算符.