/Scheme-meta-circular-evaluator

Scheme meta-circular evaluator from SICP chapter 4.

Primary LanguageSchemeMIT LicenseMIT

Scheme meta-circular evaluator

About

A Scheme meta-circular evaluator from SICP chapter 4.

Quickstart

Environment

I use MIT/GNU-Scheme 9.2 on OS X 10.11.

Interactive mode

The default interface is an interactive loop, try this:

$ scheme

1 ]=> (load "main.scm")
(load "main.scm")

;Loading "main.scm"...
;  Loading "environment.scm"...
;    Loading "primitives.scm"... done
;  ... done
;  Loading "io.scm"... done
;  Loading "procedure.scm"... done
;  Loading "utils.scm"... done

;; Meta-circular-evaluater input:

Then have fun testing whatever you want. Note that do not load "main.scm" twice, or nested apply would cause problems.

Input from file

Load "main.scm" in scheme shell, then load file like this:

;; Meta-circular-evaluater input:
(load "input.scm")

Features

;; Meta-circular-evaluater input:
(define (f x) (letrec ((even? (lambda (n) (if (= n 0) #t (odd? (- n 1))))) (odd? (lambda (n) (if (= n 0) #f (even? (- n 1)))))) (even? x)))

;; Result:
ok
;; Meta-circular-evaluater input:
(f 5)

;; Result:
#f
;; Meta-circular-evaluater input:
(f 1022)

;; Result:
#t

TODO

  • let*
  • letrec
  • Named let
  • Input from file
  • Separate syntatic anslysis from execution (SICP 4.1.7)
  • Lazy evatuating (SICP 4.2)