Guest User

Untitled

a guest
Jun 20th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. (define *dstack* '())
  2. (define *funcs* (make-hash-table 'eqv?))
  3.  
  4. (define-syntax define-command
  5. (syntax-rules ()
  6. [(_ name args body ...)
  7. (hash-table-put! *funcs* (quote name)
  8. (lambda args body ...))]))
  9.  
  10. (define-command add () (let* ((x (pop! *dstack*))
  11. (y (pop! *dstack*)))
  12. (rlet1 ans (+ x y)
  13. (push! *dstack* ans))))
  14.  
  15. (define-command pop () (pop! *dstack*))
  16. (define-command push (x) (push! *dstack* x) x)
  17. (define-command dprint () (print *dstack*))
  18. (define-command print () (print (car *dstack*)))
  19. (define-command clean () (set! *dstack* (list)))
  20.  
  21. (define (seval cmd . args)
  22. (and-let* ((cont (hash-table-get *funcs* cmd #f)))
  23. (apply cont args)))
  24.  
  25. (let1 exprs '((push 2) (push 3) (add) (print) (pop))
  26. (dolist (line exprs)
  27. (apply seval line)))
Add Comment
Please, Sign In to add comment