Skip to content

Commit

Permalink
Merge branch 'master' into textbook-dyn-scope
Browse files Browse the repository at this point in the history
  • Loading branch information
Lu, Kuang-Chen authored Aug 18, 2022
2 parents e4acf8d + a74082a commit 143d531
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 12 deletions.
10 changes: 10 additions & 0 deletions dyn-scope-is-bad/semantics.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
lambda λ
letrec
let
let*
set!
#%top
#%app])
(provide defvar deffun)
(provide [rename-out (dyn-λ λ)
(dyn-λ lambda)
(dyn-let let)
(dyn-let let*)
(dyn-let letrec)
(dyn-app #%app)
(dyn-set! set!)])
Expand Down Expand Up @@ -66,6 +68,14 @@
([_ ([var:id val:expr] ...) body:expr ...+]
#'(dyn-app (dyn-λ (var ...) body ...) val ...))))

(define-syntax dyn-let*
(syntax-rules ()
[(dyn-let* () body ...)
(dyn-let () body ...)]
[(dyn-let* (fst rest ...) body ...)
(dyn-let (fst)
(dyn-let* (rest ...) body ...))]))

(define-syntax (dyn-set! stx)
(syntax-parse stx
([_ var:id val:expr]
Expand Down
9 changes: 9 additions & 0 deletions dyn-scope-is-bad/tests/all.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,12 @@
(f)))
y))
"")

; -----

(test
(let* ([x 1]
[f (lambda () x)]
[x 2])
(f))
2)
8 changes: 4 additions & 4 deletions fun/semantics.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
let let*
if and or not true false eq? equal?
begin
ivec vlen vref
ivec vlen vec-ref
pair left right pair?
+ - * /
zero?
Expand Down Expand Up @@ -78,16 +78,16 @@

(define ivec vector-immutable)
(define vlen vector-length)
(define vref vector-ref)
(define vec-ref vector-ref)

(define (pair a b)
(ivec a b))
(define (left p)
(unless (= (vlen p) 2)
(error 'left "argument must be a pair: ~a" p))
(vref p 0))
(vec-ref p 0))
(define (right p)
(unless (= (vlen p) 2)
(error 'right "argument must be a pair: ~a" p))
(vref p 1))
(vec-ref p 1))
(define (pair? v) (and (vector? v) (= (vlen v) 2)))
7 changes: 7 additions & 0 deletions hof/tests/all.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@
(* n (fact (- n 1)))))])
(fact 5))
120)

(test
(let* ([x 1]
[f (lambda () x)]
[x 2])
(f))
1)
10 changes: 5 additions & 5 deletions scribblings/smol.scrbl
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ exotic quoted forms. (If you don't know what these are, ignore them.)
@deftogether[(
@defproc[(ivec (elem Any) ...) Vec]
@defproc[(vlen (expr Vec)) Number]
@defproc[(vref (vec-expr Vec) (idx-expr Number)) Any]
@defproc[(vec-ref (vec-expr Vec) (idx-expr Number)) Any]
)]{
The @code{ivec} operation builds an @emph{immutable} vector of the
elements in @code{elem}. Vector elements need not be of the same
type. @code{vlen} computes its length, while @code{vref} indexes
type. @code{vlen} computes its length, while @code{vec-ref} indexes
into it (starting from @code{0}).
}

Expand Down Expand Up @@ -160,10 +160,10 @@ operations.

@deftogether[(
@defproc[(mvec (elem Any) ...) Vec]
@defproc[(vset! (vec Vec) (idx Num) (val Any)) Void]
@defproc[(vec-set! (vec Vec) (idx Num) (val Any)) Void]
)]{
@code{mvec} creates @emph{mutable} vectors, and @code{vset!} modifies
them. @code{vset!} cannot modify an immutable vector.
@code{mvec} creates @emph{mutable} vectors, and @code{vec-set!} modifies
them. @code{vec-set!} cannot modify an immutable vector.
}

@deftogether[(
Expand Down
4 changes: 2 additions & 2 deletions state/semantics.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
[except-out [all-from-out smol/fun/semantics] checked-#%app]
[rename-out [checked-#%app #%app]])

(provide mvec vset!)
(provide mvec vec-set!)
(provide mpair set-left! set-right!)

(provide set!)

(define mvec vector)
(define vset! vector-set!)
(define vec-set! vector-set!)

(define (mpair a b)
(mvec a b))
Expand Down
2 changes: 1 addition & 1 deletion state/tests/all.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
(test z (pair 1 2))

(defvar w (mvec 1 2 3))
(vset! w 2 4)
(vec-set! w 2 4)
(test w #(1 2 4))

(deffun (nested-i x)
Expand Down

0 comments on commit 143d531

Please sign in to comment.