Skip to content

daicang/Scheme-meta-circular-evaluator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages