显示自定义复杂数据 class
Showing custom complex data class
我刚开始学习 数据,我正在尝试用它来定义复数。
到目前为止我有以下内容:
data Complex = Complex Int Int deriving(Eq)
instance Show Complex where
show Complex a = a -- Not working
instance Num Complex where
Complex a b + Complex c d = Complex (a+c) (b+d)
-- etc.
我想做的是实例化 Show 以使程序打印出像复数一样的字符串,例如:"a + bi"
我明白为什么我写的代码会出错,因为 a 的类型是 Complex 并且程序需要一个字符串,但我无法理解如何将两个数字分开然后将“i”添加到 b , 以及将运算符放在中间。
有什么想法吗?
行
show Complex a = a
定义了一个函数show
,有两个个参数,第一个参数是Complex
,第二个参数是a
。这处理了 class Show
中 show
的签名,我们只找到一个参数。
由于该参数必须是 Complex
,您可能需要
show (Complex a b) = show a ++ " + " ++ show b ++ "i"
注意我们如何在 a
和 b
上使用 show
类型 Int
将它们转换为字符串,然后使用 [=22 连接一堆字符串=].
另请注意,当 b
为负时,上述输出不是最优的。您可能希望相应地更改函数。
我刚开始学习 数据,我正在尝试用它来定义复数。
到目前为止我有以下内容:
data Complex = Complex Int Int deriving(Eq)
instance Show Complex where
show Complex a = a -- Not working
instance Num Complex where
Complex a b + Complex c d = Complex (a+c) (b+d)
-- etc.
我想做的是实例化 Show 以使程序打印出像复数一样的字符串,例如:"a + bi"
我明白为什么我写的代码会出错,因为 a 的类型是 Complex 并且程序需要一个字符串,但我无法理解如何将两个数字分开然后将“i”添加到 b , 以及将运算符放在中间。
有什么想法吗?
行
show Complex a = a
定义了一个函数show
,有两个个参数,第一个参数是Complex
,第二个参数是a
。这处理了 class Show
中 show
的签名,我们只找到一个参数。
由于该参数必须是 Complex
,您可能需要
show (Complex a b) = show a ++ " + " ++ show b ++ "i"
注意我们如何在 a
和 b
上使用 show
类型 Int
将它们转换为字符串,然后使用 [=22 连接一堆字符串=].
另请注意,当 b
为负时,上述输出不是最优的。您可能希望相应地更改函数。