Guile(scheme): Queue
Published:
Guile has a beautiful queue
implementation. The queue is a cons
of a list and the last
pair of the list. Get the code on Savannah
(module/ice-9/q.scm) (local cache). Queue
documentation.
As an example of how to use this data structure, we’ll implement the moving average algorithm. (mavg.scm)
(use-modules (ice-9 q) (srfi srfi-1))
define (avg n xs)
(/ (fold + 0 xs) n))
(
define (ma subn xs)
(define q (make-q))
(set-car! q (take xs subn))
(
(sync-q! q)let l ((xs (drop xs subn)) (avgs (make-q)))
(car q)))
(enq! avgs (avg subn (if (null? xs)
(car avgs)
(begin
(
(q-pop! q)car xs))
(enq! q (1) avgs))))) (l (drop xs