File tree Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Original file line number Diff line number Diff line change 1+ class Elem
2+ trait QueueSignature :
3+ type Queue
4+ def empty : Queue
5+ def append (q : Queue , e : Elem ): Queue
6+ def pop (q : Queue ): Option [(Elem , Queue )]
7+ val QueueModule : QueueSignature =
8+ object QueueImpl extends QueueSignature :
9+ type Queue = (List [Elem ], List [Elem ])
10+ def empty = (Nil , Nil )
11+ def append (q : Queue , e : Elem ): Queue = (q._1, e :: q._2)
12+ def pop (q : Queue ): Option [(Elem , Queue )] = q match
13+ case (Nil , Nil ) => None
14+ case (x :: xs, ys) => Some ((x, (xs, ys)))
15+ case (Nil , ys) => pop((ys.reverse, Nil ))
16+ QueueImpl
17+
18+ object queues :
19+ opaque type Queue = (List [Elem ], List [Elem ])
20+ def empty = (Nil , Nil )
21+ def append (q : Queue , e : Elem ): Queue = (q._1, e :: q._2)
22+ def pop (q : Queue ): Option [(Elem , Queue )] = q match
23+ case (Nil , Nil ) => None
24+ case (x :: xs, ys) => Some ((x, (xs, ys)))
25+ case (Nil , ys) => pop((ys.reverse, Nil ))
You can’t perform that action at this time.
0 commit comments