;; -*- Mode: Irken -*-
;; a simple stack
(define (make-stack)
(let ((l '()))
(define (push x)
(set! l (list:cons x l)))
(define (pop)
(match l with
() -> (error "stack underflow")
(hd . tl)
-> (let ((result hd))
(set! l tl)
result)))
(define (get) l)
(define (top)
(match l with
() -> (error "stack underflow")
(hd . _) -> hd))
(define (stack-length) (length l))
{push=push pop=pop top=top get=get length=stack-length}
))