From 5027febcfca25c7d594f72d520e6934c599fc066 Mon Sep 17 00:00:00 2001 From: Peter Hart Date: Fri, 21 Feb 2020 18:33:03 -0500 Subject: [PATCH] functional stacker --- funstacker/funstacker-test.rkt | 6 +++ funstacker/funstacker-test.rkt~ | 6 +++ funstacker/funstacker.rkt | 29 ++++++++++++++ funstacker/funstacker.rkt~ | 37 ++++++++++++++++++ .../drracket/errortrace/stacker_rkt.dep | 1 - .../drracket/errortrace/stacker_rkt.zo | Bin 8581 -> 0 bytes 6 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 funstacker/funstacker-test.rkt create mode 100644 funstacker/funstacker-test.rkt~ create mode 100644 funstacker/funstacker.rkt create mode 100644 funstacker/funstacker.rkt~ delete mode 100644 stacker/compiled/drracket/errortrace/stacker_rkt.dep delete mode 100644 stacker/compiled/drracket/errortrace/stacker_rkt.zo diff --git a/funstacker/funstacker-test.rkt b/funstacker/funstacker-test.rkt new file mode 100644 index 0000000..512373a --- /dev/null +++ b/funstacker/funstacker-test.rkt @@ -0,0 +1,6 @@ +#lang reader "funstacker.rkt" +4 +8 ++ +3 +* diff --git a/funstacker/funstacker-test.rkt~ b/funstacker/funstacker-test.rkt~ new file mode 100644 index 0000000..4b957b0 --- /dev/null +++ b/funstacker/funstacker-test.rkt~ @@ -0,0 +1,6 @@ +#lang reader "stacker.rkt" +4 +8 ++ +3 +* diff --git a/funstacker/funstacker.rkt b/funstacker/funstacker.rkt new file mode 100644 index 0000000..3405e2f --- /dev/null +++ b/funstacker/funstacker.rkt @@ -0,0 +1,29 @@ +#lang br/quicklang + +(define (read-syntax path port) + (define src-lines (port->lines port)) + (define src-datums (format-datums '~a src-lines)) + (define module-datum `(module stacker-mod "funstacker.rkt" + (handle-args ,@src-datums))) + (datum->syntax #f module-datum)) + +(provide read-syntax) + +(define-macro (stacker-module-begin HANDLE-ARGS-EXPR) + #'(#%module-begin + (display (first HANDLE-ARGS-EXPR)))) + +(provide (rename-out [stacker-module-begin #%module-begin])) + +(define (handle-args . args) + (for/fold ([stack-acc empty]) + ([arg (in-list args)] + #:unless (void? arg)) + (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 + *) \ No newline at end of file diff --git a/funstacker/funstacker.rkt~ b/funstacker/funstacker.rkt~ new file mode 100644 index 0000000..bdd5c02 --- /dev/null +++ b/funstacker/funstacker.rkt~ @@ -0,0 +1,37 @@ +#lang br/quicklang + +(define (read-syntax path port) + (define src-lines (port->lines port)) + (define src-datums (format-datums '(handle ~a) src-lines)) + (define module-datum `(module stacker-mod "stacker.rkt" + ,@src-datums)) + (datum->syntax #f module-datum)) + +(provide read-syntax) + +(define-macro (stacker-module-begin HANDLE-EXPR ...) + #'(#%module-begin + HANDLE-EXPR ... + (display (first stack)))) + +(provide (rename-out [stacker-module-begin #%module-begin])) + +(define stack empty) + +(define (pop-stack!) + (define arg (first stack)) + (set! stack (rest stack)) + arg) + +(define (push-stack! arg) + (set! stack (cons arg stack))) + +(define (handle [arg #f]) + (cond + [(number? arg) (push-stack! arg)] + [(or (equal? + arg) (equal? * arg)) + (define op-result (arg (pop-stack!) (pop-stack!))) + (push-stack! op-result)])) + +(provide handle) +(provide + *) \ No newline at end of file diff --git a/stacker/compiled/drracket/errortrace/stacker_rkt.dep b/stacker/compiled/drracket/errortrace/stacker_rkt.dep deleted file mode 100644 index 5b503af..0000000 --- a/stacker/compiled/drracket/errortrace/stacker_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.5" racket ("7f677926d966a8cec92cb8a8b1e1bd44f09f4aab" . "f00a81ce44a6ee4c31b492d8e2e91c13a4a1e5aa") (collects #"br" #"quicklang.rkt") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/stacker/compiled/drracket/errortrace/stacker_rkt.zo b/stacker/compiled/drracket/errortrace/stacker_rkt.zo deleted file mode 100644 index accb392fb1ba62a8ad4886370524f975230c8bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8581 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