3 ms·
If you don't mind using mutation for private state in a functional language, objects and closures are kinda the exact same thing. (define (make-queue)
by srcreigh 5y ago
If you don't mind using mutation for private state in a functional language, objects and closures are kinda the exact same thing.
(define (make-queue)
(define data empty)
(lambda (cmd [arg #f])
(match cmd
['enqueue (set! data (append data (list arg)))]
['dequeue
(define value (first data)
(set! data (rest data))
value])))
Don't see the connection yet? Let me try again.
(define (make-queue)
(define data empty)
(define (instance cmd [arg #f])
(match cmd
['enqueue (set! data (append data (list arg)))]
['dequeue
(define value (first data)
(set! data (rest data))
value]))
instance)