Skip to content

let

Bind a variable

Given a file named “main.scm” with:

(import (scheme base))
(write-u8 (let ((x 65)) x))

When I successfully run scheme main.scm

Then the stdout should contain exactly “A”.

Bind two variables

Given a file named “main.scm” with:

(import (scheme base))
(write-u8 (let ((x 60) (y 5)) (+ x y)))

When I successfully run scheme main.scm

Then the stdout should contain exactly “A”.

Call a bound procedure

Given a file named “main.scm” with:

(import (scheme base))
(define (f) 65)
(define (g)
(let ((h f))
(h)))
(write-u8 (g))

When I successfully run scheme main.scm

Then the stdout should contain exactly “A”.

Cause a side effect in a body

Given a file named “main.scm” with:

(import (scheme base))
(write-u8
(let ((x 66))
(write-u8 65)
x))

When I successfully run scheme main.scm

Then the stdout should contain exactly “AB”.

Do not corrupt a procedure environment

Given a file named “main.scm” with:

(import (scheme base))
(define (f)
(let (
(g
(let ((x 65))
(lambda () x))))
g))
(write-u8 ((f)))

When I successfully run scheme main.scm

Then the stdout should contain exactly “A”.