================= LISP on browser ================= This is small implementation of LISP, which written in JavaScript and run on browsers. I think it helps you to understand what going on in programming languages by using it and reading its source codes. Demo ==== .. raw:: html

Design ====== Readability counts. My goal is not to make complete features of Lisp. It makes source codes huge and makes difficult to read. TODO ==== - Refactor commit history so that readers can learn how to implement LISP step by step. 'feature/M1-S-Expression-Parser' branch is nice but 'feature/M2' has actually 4 milestone. - Connect with https://github.com/nishio/AST-Visualization-on-browser - Make a site in English and Japanese (for my book's readers) History ======= This list corresponds to current commit history. We need refactor it. - Milestone1: S-expression Parser - given string such like "(* 1 (+ 2 3))" and return syntax trees - in this point forget about reader macros such as "'(1 2 3)" - 'feature/M2' - Milestone2: Some Built-in function - arithmetic functions: +, -, \*, / - other functions: eval, cons, list - (done) Milestone3: A REPL interpreter(when user input (* 1 (+ 2 3)), it prints 5) - Now we can (* 1 (+ 2 3)) - (done) Milestone4: Special forms: quote and if - (done) Milestone5: Reader syntax with apostrophe: '(+ 2 2) = (quote (+ 2 2)) - 'feature/factorial_and_counter' - Milestone6: equality and comparison: =, /=, <, etc. - Milestone7: comments in the code - Milestone8: a textbox for loading examples into interpreter - Milestone9: lexical scope (let and variables) - Milestone10: defining your own functions (defun) - Now we can make factorial and counter - 'feature/macro' - variable-length argument lists (func arg1 arg2 . rest) - defmacro and macro-expansion stage - macroexpand function - quasiquote and unquote (` ,) for easier building of macros - a 'gensym' function and example illustrating the problem of hygiene in macros. License ======= GPLv3 (c) NISHIO Hirokazu 2012 Thanks ====== Paweł Marczewski contributed much to the project.