From d69757cf858f207102bf6ca0225afc3287c41396 Mon Sep 17 00:00:00 2001 From: Jean Carass Date: Sun, 31 Dec 2017 00:41:40 -0500 Subject: [PATCH 1/4] Improved handle to support ext. op. like - and / --- beautiful-racket-demo/stacker-demo/stacker.rkt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/beautiful-racket-demo/stacker-demo/stacker.rkt b/beautiful-racket-demo/stacker-demo/stacker.rkt index f599279..e3f0a99 100644 --- a/beautiful-racket-demo/stacker-demo/stacker.rkt +++ b/beautiful-racket-demo/stacker-demo/stacker.rkt @@ -28,7 +28,10 @@ (cond [(number? arg) (push-stack! arg)] [(or (equal? * arg) (equal? + arg)) - (define op-result (arg (pop-stack!) (pop-stack!))) + ; This will ensure that stacker can be extended to support - and / operations while keeping the RPN notation + (define operand2 (pop-stack!)) + (define operand1 (pop-stack!)) + (define op-result (arg operand1 operand2)) (push-stack! op-result)])) (provide handle) -- 2.25.1 From 8a319647f7a5378a26aa57344dc9ed299e1bb791 Mon Sep 17 00:00:00 2001 From: Jean Carass Date: Sun, 31 Dec 2017 00:43:31 -0500 Subject: [PATCH 2/4] Create stacker-extended.rkt --- .../stacker-demo/stacker-extended.rkt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 beautiful-racket-demo/stacker-demo/stacker-extended.rkt diff --git a/beautiful-racket-demo/stacker-demo/stacker-extended.rkt b/beautiful-racket-demo/stacker-demo/stacker-extended.rkt new file mode 100644 index 0000000..8ef8af7 --- /dev/null +++ b/beautiful-racket-demo/stacker-demo/stacker-extended.rkt @@ -0,0 +1,38 @@ +#lang br/quicklang + +(define (read-syntax path port) + (define args (port->lines port)) + (define handle-datums (format-datums '(handle ~a) args)) + (define module-datum `(module stacker-mod stacker-demo/stacker + ,@handle-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) (equal? - arg) (equal? / arg)) + ; This will ensure that stacker can be extended to support - and / operations while keeping the RPN notation + (define operand2 (pop-stack!)) + (define operand1 (pop-stack!)) + (define op-result (arg operand1 operand2)) + (push-stack! op-result)])) +(provide handle) + +(provide + * - /) -- 2.25.1 From 78b6b928f22fbb0660853ed716f1ed347f84ea5b Mon Sep 17 00:00:00 2001 From: Jean Carass Date: Sun, 31 Dec 2017 00:45:17 -0500 Subject: [PATCH 3/4] Create stacker-test-3.rkt --- beautiful-racket-demo/stacker-demo/stacker-test-3.rkt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 beautiful-racket-demo/stacker-demo/stacker-test-3.rkt diff --git a/beautiful-racket-demo/stacker-demo/stacker-test-3.rkt b/beautiful-racket-demo/stacker-demo/stacker-test-3.rkt new file mode 100644 index 0000000..bee62f2 --- /dev/null +++ b/beautiful-racket-demo/stacker-demo/stacker-test-3.rkt @@ -0,0 +1,8 @@ +#lang reader "stacker-extended.rkt" +3 +4 +/ +1 +4 +/ ++ -- 2.25.1 From ccfd3bd178708ae0bf29aaf56a49fbb846263168 Mon Sep 17 00:00:00 2001 From: Jean Carass Date: Sun, 31 Dec 2017 00:46:27 -0500 Subject: [PATCH 4/4] Create stacker-test-2.rkt --- beautiful-racket-demo/stacker-demo/stacker-test-2.rkt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 beautiful-racket-demo/stacker-demo/stacker-test-2.rkt diff --git a/beautiful-racket-demo/stacker-demo/stacker-test-2.rkt b/beautiful-racket-demo/stacker-demo/stacker-test-2.rkt new file mode 100644 index 0000000..bec0922 --- /dev/null +++ b/beautiful-racket-demo/stacker-demo/stacker-test-2.rkt @@ -0,0 +1,6 @@ +#lang reader "stacker-extended.rkt" +3 +4 +- +5 +- -- 2.25.1