R7RS source

Lesson 0 example source

Highlighted source view with a raw source link.

Checked R7RS Scheme source for Lesson 0.

Open raw source

(import (scheme base)
        (scheme write)
        (scheme process-context))

(define failures '())

(define (record-failure label expected actual)
  (set! failures (cons (list label expected actual) failures)))

(define (check-equal label expected actual)
  (unless (equal? expected actual)
    (record-failure label expected actual)))

(define two-plus-three (+ 2 3))

(define (large? n)
  (> n 10))

(define (list->label items)
  (if (null? items)
      'empty-list
      'nonempty-list))

; A semicolon starts a comment that continues to the end of the line.

(define begin-result
  (begin
    (+ 1 2)  ; This value is evaluated, then ignored.
    (* 3 4))) ; This final value is the value of the begin form.

(define quoted-symbol (quote finish!))
(define quoted-list '(+ 2 3))

(define name 'Ada)
(define quasiquoted-list `(hello ,name))

(check-equal 'prefix-call 5 (+ 2 3))
(check-equal 'identifier-with-signs 5 two-plus-three)
(check-equal 'predicate-name #t (large? 12))
(check-equal 'arrow-name 'empty-list (list->label '()))
(check-equal 'symbol-literal 'finish! 'finish!)
(check-equal 'symbol-with-arrow 'list->vector 'list->vector)

(check-equal 'self-evaluating-number 42 42)
(check-equal 'self-evaluating-string "Scheme" "Scheme")
(check-equal 'begin-last-value 12 begin-result)
(check-equal 'quote-word 'finish! quoted-symbol)
(check-equal 'quoted-list '(+ 2 3) quoted-list)
(check-equal 'quote-spelling 'finish! (quote finish!))
(check-equal 'quasiquote-preview '(hello Ada) quasiquoted-list)
(check-equal 'procedure-object #t (procedure? +))

(if (null? failures)
    (begin
      (display "Intro lesson 00 tests passed")
      (newline)
      (exit 0))
    (begin
      (display "Intro lesson 00 tests failed")
      (newline)
      (for-each (lambda (failure)
                  (write failure)
                  (newline))
                (reverse failures))
      (exit 1)))