美文网首页Haskell
[Haskell] Queue

[Haskell] Queue

作者: 何幻 | 来源:发表于2017-03-27 13:44 被阅读30次

1. 列表表示

module Queue(Queue,emptyQueue,queueEmpty,enqueue,dequeue,front) where 

newtype Queue a = Q [a]
    deriving Show 

emptyQueue :: Queue a 
emptyQueue = Q []

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

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

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

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

2. 使用两个列表

module Queue(Queue,emptyQueue,queueEmpty,enqueue,dequeue,front) where 

newtype Queue a = Q ([a], [a])

emptyQueue :: Queue a 
emptyQueue = Q ([], [])

queueEmpty :: Queue a -> Bool
queueEmpty (Q ([], [])) = True 
queueEmpty _ = False

enqueue :: a -> Queue a -> Queue a 
enqueue x (Q ([], [])) = Q ([x], [])
enqueue y (Q (xs, ys)) = Q (xs, y:ys)

dequeue :: Queue a -> Queue a 
dequeue (Q ([], [])) = error "dequeue: empty queue"
dequeue (Q ([], ys)) = Q (tail $ reverse ys, [])
dequeue (Q (x:xs, ys)) = Q (xs, ys)

front :: Queue a -> a 
front (Q ([], [])) = error "front: empty queue"
front (Q ([], ys)) = last ys
front (Q (x:xs, ys)) = x

instance (Show a) => Show (Queue a) where 
    showsPrec p (Q (front, rear)) str = 
        showString "Q " (showList (front ++ reverse rear) str)

参考

Algorithms: A Functional Programming Approach

相关文章

  • [Haskell] Queue

    1. 列表表示 2. 使用两个列表 参考 Algorithms: A Functional Programming...

  • 函数式的宗教-00: 认识lisp(clojure)与haske

    总体大纲: lisp与haskell简单介绍 lisp与haskell应用领域 lisp与haskell技术分析 ...

  • monad以及monad的四条定理

    haskell的范畴是hask范畴(haskell的所有类型隶属于hask范畴),所以haskell的所有函子都是...

  • 01 数据类型

    swift中结构体在haskell中的描述 枚举类型在haskell中的描述 枚举携带类型在haskell中描述 ...

  • Haskell学习-函数式编程初探

    原文地址:Haskell学习-函数式编程初探  为什么要学习函数式编程?为什么要学习Haskell?  .net到...

  • Haskell

    [TOC] Haskell GHCI 通过Tab可以自动补全 通过 :browser 模块名称,浏览该模块下的函数...

  • haskell

    我在这里只是表达此刻内心想到的一些事情,或者记录自己关于最近学习生活工作的想法。 从我这一周对haskell的学习...

  • [Haskell] $

    函数“$”称为function application operator,定义如下: 与函数调用不同的是,函数调用...

  • [Haskell] .

    函数“.”称为function composition,定义如下: 我们看到,函数f接受函数g的返回值作为参数。函...

  • haskell

    stack --resolver lts-9 install ghc-mod Haskell-ghc-mod ::...

网友评论

    本文标题:[Haskell] Queue

    本文链接:https://www.haomeiwen.com/subject/idkrottx.html