Yeah the latter version parses as 2 symbols in sjacket, whereas the defn
version parses as a single list.
user=> (p/parser "top%")
#net.cgrand.parsley.Node{:tag :net.cgrand.sjacket.parser/root, :content
[#net.cgrand.parsley.Node{:tag :symbol, :content
[#net.cgrand.parsley.Node{:tag :name, :content ["top"]}]}
#net.cgrand.parsley.Node{:tag :symbol, :content
[#net.cgrand.parsley.Node{:tag :name, :content ["%"]}]}]}
REPLy uses sjacket to split input expressions and send them each off to
nREPL in sequence, IIRC so that you get all results back from stuff like:
user=> 1 2 3
1
2
3
So it treats the "top%" input basically the same as if there were
intervening whitespace, like "top %".
>From http://clojure.org/reader:
-----
Symbols begin with a non-numeric character and can contain alphanumeric
characters and *, +, !, -, _, and ? (other characters will be allowed
eventually, but not all macro characters have been determined). '/' has
special meaning, it can be used once in the middle of a symbol to separate
the namespace from the name, e.g. my-namespace/foo. '/' by itself names the
division function. '.' has special meaning - it can be used one or more
times in the middle of a symbol to designate a fully-qualified class name,
e.g. java.util.BitSet, or in namespace names. Symbols beginning or ending
with '.' are reserved by Clojure. Symbols containing / or . are said to be
'qualified'. Symbols beginning or ending with ':' are reserved by Clojure.
A symbol can contain one or more non-repeating ':'s.
-----
So it looks to me like that function name is illegal, and it's an
implementation detail that it currently is allowed to work.
Usually parsing fixes for lein repl belong in sjacket
(https://github.com/cgrand/sjacket/issues), but I'm not 100% convinced the
parser should say top% is a legitimate symbol. But I'm also not convinced
it should ever be possible for 2 symbols to be right next to each other
with no intervening whitespace. Not sure what the right thing to do is
here. Let's discuss further in an issue on sjacket.
Short-term workaround: `(do top%)`.
On Tuesday, June 17, 2014 9:54:25 AM UTC-5, daveray wrote:
>
> I believe this is a problem with the Leiningen REPL. It works fine from
> the built-in REPL:
>
> $ java -jar ~/.m2/repository/org/clojure/clojure/1.5.1/clojure-1.5.1.jar
> Clojure 1.5.1
> user=> (def top% 4)
> #'user/top%
> user=> top%
> 4
>
> Dave
>
>
>
>
> On Tue, Jun 17, 2014 at 1:32 AM, Mike Thompson <[email protected]
> <javascript:>> wrote:
>
>> At the REPL ...
>>
>>
>> user=> (def top% 4) ;; an unusually named var
>> #'user/top%
>>
>> But later, it I try to use this var, trouble ...
>>
>> user=> top%
>>
>> CompilerException java.lang.RuntimeException: Unable to resolve symbol:
>> top in this context,
>> compiling:(Local\Temp\form-init6773082655831127234.clj:1:734)
>> CompilerException java.lang.RuntimeException: Unable to resolve symbol: %
>> in this context,
>> compiling:(Local\Temp\form-init6773082655831127234.clj:1:734)
>>
>>
>> Not sure what to make if this. Obviously % is a bit special. And it is
>> certainly not a significant problem for me, at all. Just seemed odd that
>> I'm allowed to successfully do the def, if it is just going to cause
>> problems later.
>>
>> --
>>
>> Mike
>>
>>
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> 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 [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.