Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define *dstack* '())
- (define *funcs* (make-hash-table 'eqv?))
- (define-syntax define-command
- (syntax-rules ()
- [(_ name args body ...)
- (hash-table-put! *funcs* (quote name)
- (lambda args body ...))]))
- (define-command add () (let* ((x (pop! *dstack*))
- (y (pop! *dstack*)))
- (rlet1 ans (+ x y)
- (push! *dstack* ans))))
- (define-command pop () (pop! *dstack*))
- (define-command push (x) (push! *dstack* x) x)
- (define-command dprint () (print *dstack*))
- (define-command print () (print (car *dstack*)))
- (define-command clean () (set! *dstack* (list)))
- (define (seval cmd . args)
- (and-let* ((cont (hash-table-get *funcs* cmd #f)))
- (apply cont args)))
- (let1 exprs '((push 2) (push 3) (add) (print) (pop))
- (dolist (line exprs)
- (apply seval line)))
Add Comment
Please, Sign In to add comment