diff --git a/Makefile b/Makefile index 9d8e247..7bf3442 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CC=gcc -Wall -ansi -G +CC=gcc -Wall -g all: lake diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..a5fc184 --- /dev/null +++ b/Readme.md @@ -0,0 +1,43 @@ +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. diff --git a/lake.c b/lake.c index 7a2222d..b3447a8 100644 --- a/lake.c +++ b/lake.c @@ -5,7 +5,7 @@ * Copyright 2011 Sami Samhuri * MIT License * - * A quick and dirty scheme written in C for fun and to use while + * A quick and dirty scheme written in C, for fun and to use while * reading The Little Schemer. * */ diff --git a/sym.c b/sym.c index 1d72ea2..b0b2801 100644 --- a/sym.c +++ b/sym.c @@ -27,7 +27,7 @@ LakeSym *sym_intern(char *s) sym->n = n; sym->s = strdup(s); sym->hash = ht_hash(s, n, symbols->size); - ht_put(symbols, sym->s, sym->n, sym, sizeof(LakeSym)); + ht_put(symbols, sym->s, sym->n, sym, VAL_SIZE(sym)); } return sym; }