Haskell:我的程序没有进行转换

时间:2013-03-10 17:13:37

标签: haskell

我制作了一个简单的程序来处理我实现的队列数据结构。这是我的代码

transf :: Queue -> [Char]
transf emptyQueue = []  
transf queue = [front queue] ++ transf (dequeue queue)

队列在哪里

newtype Queue = Q [Char] deriving (Show)

emptyQueue :: Queue
emptyQueue = Q []

queueIsEmpty :: Queue -> Bool
queueIsEmpty (Q []) = True
queueIsEmpty (Q _) = False

enqueue :: Char -> Queue -> Queue
enqueue x (Q q) = Q (q ++ [x])

dequeue :: Queue -> Queue
dequeue (Q (_:xs)) = Q xs
dequeue (Q []) = error "dequeue: empty queue"

front :: Queue -> Char
front (Q (x:_)) = x
front (Q []) = error "front: empty queue"

我的程序不会将队列转换为字符串。问题出在哪儿? 提前谢谢。

1 个答案:

答案 0 :(得分:4)

transf emptyQueue = []

此处emptyQueue只是参数的名称。您不是与全局emptyQueue的内容进行模式匹配。你不能对这样的变量进行模式匹配 - 仅针对构造函数。

您必须编写transf (Q [])以匹配空队列,但请注意您的整个功能可以简单地定义为transf (Q xs) = xs