PasteRack.org
Paste # 55873
2020-03-29 21:22:25

Fork as a new paste.

Paste viewed 336 times.


Embed:

#lang br/quicklang

(define (read-syntax path port)
  (define src-lines (filter non-empty-string? (port->lines port)))
  (define src-datums (format-datums '~a src-lines))
  (define module-datum `(module stacker-mod "funstacker.rkt"
                          ',src-datums))
  (datum->syntax #f module-datum))
(provide read-syntax)

(define-macro (stacker-module-begin HANDLE-ARGS-EXPR)
  #'(#%module-begin
     (display HANDLE-ARGS-EXPR)))
(provide (rename-out [stacker-module-begin #%module-begin]))

(define (handle-args . args)
  (for/fold ([stack-acc empty])
            ([arg (in-list args)])
    (cond
      [(number? arg) (cons arg stack-acc)]
      [(or (equal? * arg) (equal? + arg))
       (define op-result
         (arg (first stack-acc) (second stack-acc)))
       (cons op-result (drop stack-acc 2))])))
(provide handle-args)
(provide + * quote  list)