added a readme

master
Jordan Orelli 12 years ago
parent 1ee8bff82c
commit b75f1e2491

@ -0,0 +1,30 @@
# skeam
Skeam is a primitive
[Lisp](http://en.wikipedia.org/wiki/Lisp_(programming_language\)) interpreter.
I wrote this out of a curiosity to learn about the basics of writing
interpreters; it's not something that I'd recommend using, but it may be
helpful to look at if you're interested in writing your own. The name comes
from [Scheme](http://en.wikipedia.org/wiki/Scheme_(programming_language\)) and
[Skream](http://en.wikipedia.org/wiki/Skream).
Skeam does not implement [tail-call](http://en.wikipedia.org/wiki/Tail_call)
elimination or [continuations](http://en.wikipedia.org/wiki/Continuation), so
it's not technically a Scheme implementation.
The `input.scm` file gives an example of what is currently understood by the interpreter.
## installing skeam
First make sure you have Go1, the current version of the Go programming
language. If you don't have it, you can download it
[here](http://golang.org/doc/install).
Skeam is go-gettable, so installation only requires the following command: `go
install github.com/jordanorelli/skeam`. Make sure your `$GOBIN` is included in
your environment's `$PATH`. E.g., on Mac OS X, this generally means adding
`export PATH=$PATH:/usr/local/go/bin` to your `.bashrc`.
Once installed, you can access the Skeam REPL by simply running the command
`skeam`. To execute a Skeam file, pass the filename as a parameter to the
`skeam` command. E.g., `skeam input.scm` would run the `input.scm` file.

@ -95,3 +95,28 @@ x
(counter) (counter)
(counter) (counter)
(counter) (counter)
; ------------------------------------------------------------------------------
; norving examples
; ------------------------------------------------------------------------------
(define area (lambda (r) (* 3.141592653 (* r r))))
(area 3)
; <= isn't defined yet
; (define fact (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1))))))
; (fact 10)
; this one is an overflow error :(
; (fact 100)
; (area (fact 10))
; (define first car)
; (define rest cdr)
; (define count
; (lambda (item L)
; (if L (+ (equal? item (first L)) (count item (rest L)))
; 0)))
; (count 0 (list 0 1 2 3 0 0))
; (count (quote the) (quote (the more the merrier the bigger the better)))

Loading…
Cancel
Save