Haskell队列作为Show的实例
我已经在Haskell数据队列= 现在我们被要求定义一个函数showQueue作为一个助手函数,将我的数据队列声明为Show的一个实例(序言) 真的不知道该怎么做 有人能帮我吗 期待中的感谢 PS:如果需要,我可以发布我的数据队列代码 这是我的密码:Haskell队列作为Show的实例,haskell,Haskell,我已经在Haskell数据队列= 现在我们被要求定义一个函数showQueue作为一个助手函数,将我的数据队列声明为Show的一个实例(序言) 真的不知道该怎么做 有人能帮我吗 期待中的感谢 PS:如果需要,我可以发布我的数据队列代码 这是我的密码: data Queue a = Q [a] deriving Show isEmpty :: Queue a -> Bool isEmpty (Q [])
data Queue a = Q [a]
deriving Show
isEmpty :: Queue a -> Bool
isEmpty (Q []) = True
isEmpty (Q _) = False
enqueue :: (Ord a) => a -> Queue a -> Queue a
enqueue x (Q xs) = Q (xs++[x])
这可能是解决此问题的方法之一:
data Queue a = Q [a]
instance Show a => Show (Queue a) where
show = showQueue
showQueue :: Show a => Queue a -> String
showQueue (Q xs) = concat $ intersperse "," $ map show xs
showQueue是一个演示示例输出的函数。通过更改该函数的定义,可以以任何方式显示自定义输出
或者这会容易得多:
showQueue :: Show a => Queue a -> String
showQueue (Q xs) = show xs
如果要创建派生的实例,也不要使用派生。否则它将抛出编译错误。假设您需要编写自己的
Show
实例,而不是使用派生
。您可能需要显示队列中的每个元素。在这种情况下,元素类型a
需要是Show
的一个实例,然后您可以通过某种方式将显示的值组合在一起,例如
instance Show a => Show (Queue a) where
show (Q l) = "Queue " ++ show l
数据队列的Post代码。是否要以特定方式格式化输出?您的
队列
类型已经在派生Show
,因此您打算删除该类型并创建显式实例吗?您好,没有,我被要求添加一个额外的函数作为辅助函数,以使队列成为Show中的一个实例。衍生节目不能被删除。非常感谢!但是concat$intersperse在这个上下文中意味着什么呢?intersperse
将在列表和concat
之间放置“,”将它们连接到一个字符串