From f211d350e050d6c50baa9a673b96c7dba708503a Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 7 Aug 2019 13:29:43 -0400 Subject: [PATCH] Issue #331 - Ensure map evaluates in order Reverse so everything is evaluated in order, then reverse again so final results are in order. --- scheme/eval.sld | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/scheme/eval.sld b/scheme/eval.sld index aed4d6d8..58d916f5 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -614,17 +614,22 @@ rename-env local-renamed)))))) (cond - ;; special case - a begin can splice in definitions, so we can't use the - ;; built-in macro that just expands them in a new lambda scope. Instead - ;; we nest them below within the same lexical environment. + ;; special case - begin can splice in definitions, so we can't use the + ;; built-in macro that just expands them within a new lambda scope. + ;; Instead we nest them below within the same lexical environment. ((eq? 'begin op) ;(newline) ;(display "/* ") ;(write (list exp)) ;(display "*/ ") - (let ((fncs (map (lambda (expr) - (analyze expr a-env rename-env local-renamed)) - (cdr exp)))) + (let ((fncs + ;; Our map starts from the end, we reverse + ;; so everything is evaluated in order, then + ;; reverse again so results are in order + (reverse + (map (lambda (expr) + (analyze expr a-env rename-env local-renamed)) + (reverse (cdr exp)))))) (lambda (env) (foldl (lambda (fnc _) (fnc env)) #f fncs)))) ;; compiled macro