Little Lisp interpreter
recurse.com
recurse.com
var tokenize = function(input) {
return replace(/\(/g, ' ( ')
.replace(/\)/g, ' ) ')
.trim()
.split(/\s+/);
};
Code like this makes me a little upset. It'll completely break on simple cases: `(print "To close the REPL, type (quit).")` being an obvious example.I get that it's a toy example, but all too often it slides into tricking people that hard* problems are trivial.
* - I'm aware that tokenization has been a solved problem for decades—what I'm trying to say is that it takes quite a bit more thought than the four-line implementation suggests.
How does the interpreter know that the (1 2) part is a list, and not an application of 1 to 2?
var tokenize = function(input) {
return replace(/\(/g, ' ( ')
.replace(/\)/g, ' ) ')
.trim()
.split(/\s+/);
};
shouldn't it say
return input.replace( ...