No description
Find a file
2011-04-17 22:16:57 -07:00
.gitignore first commit 2011-04-17 21:24:23 -07:00
bool.c first commit 2011-04-17 21:24:23 -07:00
bool.h first commit 2011-04-17 21:24:23 -07:00
env.c fix some compiler warnings on linux 2011-04-17 22:16:57 -07:00
env.h first commit 2011-04-17 21:24:23 -07:00
hashtab.c first commit 2011-04-17 21:24:23 -07:00
hashtab.h first commit 2011-04-17 21:24:23 -07:00
int.c first commit 2011-04-17 21:24:23 -07:00
int.h first commit 2011-04-17 21:24:23 -07:00
lake.c fix some compiler warnings on linux 2011-04-17 22:16:57 -07:00
lake.h first commit 2011-04-17 21:24:23 -07:00
list.c first commit 2011-04-17 21:24:23 -07:00
list.h first commit 2011-04-17 21:24:23 -07:00
Makefile add a readme, fix Makefile 2011-04-17 22:08:36 -07:00
parse.c first commit 2011-04-17 21:24:23 -07:00
parse.h first commit 2011-04-17 21:24:23 -07:00
Readme.md add a readme, fix Makefile 2011-04-17 22:08:36 -07:00
string.c fix some compiler warnings on linux 2011-04-17 22:16:57 -07:00
string.h first commit 2011-04-17 21:24:23 -07:00
sym.c add a readme, fix Makefile 2011-04-17 22:08:36 -07:00
sym.h first commit 2011-04-17 21:24:23 -07:00

Lake Scheme

A quick and dirty scheme written in C, for fun and to use while reading The Little Schemer. Very quick and dirty, a weekend hack.

Compiling & Running

Portable ANSI C, no deps, nothing to configure, no documentation!

$ make
$ ./lake

That will drop you at a repl. You can type expressions and they will be echoed back to you. There are symbols, integers, strings, and lists.

> (foo bar 42 "hello" (nested list))
(foo bar 42 "hello" (nested list))

Hooray! It parses (reads), evaluates, and then prints things back.

Lake needs:

  • booleans
  • chars
  • functions
  • flesh out eval, write apply
  • dotted lists
  • primitives (especially define)
    • define and friends
    • branching
    • native type operations
      • symbol
      • integer (math)
      • boolean (logic)
      • char
      • string
      • function
      • list (cons, car, cdr, ...)
      • dotted list
  • a minimal stdlib
  • sugar such as '... -> (quote ...)

I don't think I'll need any other numeric types, but they are easy to implement anyway when performance is no concern and they're all boxed.