我试图做一个队列练习,我打算为给定的队列编写入队、出队、顶部和大小函数。出队功能目前给我带来了麻烦。dequeue 函数的期望结果如下所示。
(define q (make-queue))
(enqueue q 10)
(enqueue q 20)
(enqueue q 30)
(dequeue q)
10
(dequeue q)
20
(dequeue q)
我的代码目前看起来像这样
(module queue racket
(provide make-queue enqueue dequeue top size) ;queue-tests)
(struct queue (front back size) #:mutable #:transparent)
(define (make-queue) (queue null null 0))
(define (enqueue q elt)
(set-queue-size! q (+ (queue-size q) 1))
(set-queue-back! q (cons elt (queue-back q)))
)
(define (dequeue q)
(cond ((eq? (queue-size q) 0) null)
((null? (queue-front q))
(begin
(set-queue-front! q (cdr (reverse (queue-back q))))
(set-queue-back! q null)
(set-queue-size! q (- (queue-size q) 1))))
(#t
(begin
(set-queue-front! q (cdr (queue-front q)))
(set-queue-size! q (- (queue-size q) 1))))))
(define (top q)
(cond ((eq? (queue-size q) 0) null)
((null? (queue-front q)) (last (queue-back q)))
(#t (car (queue-front q)))))
(define (size q)
(queue-size q))
请问dequeue函数有什么问题?我对球拍相当陌生,我们将不胜感激。