daicang / Scheme-meta-circular-evaluator

Scheme meta-circular evaluator from SICP chapter 4.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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)

About

Scheme meta-circular evaluator from SICP chapter 4.

License:MIT License


Languages

Language:Scheme 100.0%