私はキューの演習を行おうとしていますが、特定のキューのエンキュー、デキュー、トップ、およびサイズ関数を作成することを意図しています。現在、デキュー機能で問題が発生しています。デキュー関数の望ましい結果を以下に示します。
(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))
デキュー機能の何が問題になっていますか? 私はラケットにかなり慣れていないので、説明をいただければ幸いです。