--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Ok. The parser reads a single complete expression and discards the rest. It understands that once it has hit a new character that represents the beginning of a new expression, it doesn't care.
I suppose I thought the parser would raise an error on detecting an unmatched parenthesis, but that's wrong.
Interestingly, when I try this at the repl (1.5.1) it errors as I expected (probably why I expected it in the first place):
user=> 1000N)
1000NOf course, the repl doesn't use "read-string." So, the next step in my journey is to investigate the source of clojure.main. But - someone wants to take the opportunity to ruin the surprise for me - with a more detailed explanation / theory discussion - I'm open to it :)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:219)
On Mon, Apr 29, 2013 at 1:57 PM, noahlz <nzu...@gmail.com> wrote:
Ok. The parser reads a single complete expression and discards the rest. It understands that once it has hit a new character that represents the beginning of a new expression, it doesn't care.
I suppose I thought the parser would raise an error on detecting an unmatched parenthesis, but that's wrong.
Interestingly, when I try this at the repl (1.5.1) it errors as I expected (probably why I expected it in the first place):
user=> 1000N)
1000NOf course, the repl doesn't use "read-string." So, the next step in my journey is to investigate the source of clojure.main. But - someone wants to take the opportunity to ruin the surprise for me - with a more detailed explanation / theory discussion - I'm open to it :)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:219)
But notice that this *also* returns 1000N, first. So the cases aren't that different: it managed to read a complete expression, and evaluated it. Then it tried to read *another* expression from the unconsumed input. The difference is only that read-string doesn't attempt to exhaust its input argument.
If you want to exhaust read-string's input argument, getting back a vector of all of the objects in the input and an error if any of them are syntactically invalid, just call (read-string (str "[" in-string "]")). This also deals with empty inputs in a non-blowing-up manner, returning an empty vector, which might allow uniform handling of the cases (empty? in-string) and (not (empty? in-string)) in some instances.
I'm guessing vectors are safer than lists for passing to eval?