On Oct 6, 2008, at 9:07 AM, hotcore wrote:

> I was playing around with data structures and found that I couldn't
> type:
>   (conj  #{aap noot mies} 'wim)
> which results in:
>   java.lang.Exception: Unable to resolve symbol: mies in this context
>
> Instead I have to type:
>   (conj  '#{aap noot mies} 'wim)
> or:
>   (conj  (set '(aap noot mies)) 'wim)
>
> I wonder why the quote is needed. Normally the quote is only used to
> prevent the first item of a list being interpreted as a (special)
> operator / function; but that's not the case here. Or is it?

In addition to literal lists, symbols also evaluate to something other  
than themselves. Without a quote:

        - a list evaluates to the result of a function call

        - a symbol is first "resolved" to identify a let-bound name or a var  
that it represents and evaluates to the value bound to that name or var.

The error message you got is describing the latter case.

The line you typed:

>   (conj  #{aap noot mies} 'wim)


is not meaningless--it just isn't the correct way to express what you  
wanted.

Here's a context where it would have been accepted:

        user=> (let [aap 1 noot 2 mies 3]
          (conj #{aap noot mies} 'wim))
        #{1 2 3 wim}
        user=>

In addition to these:

> Instead I have to type:
>   (conj  '#{aap noot mies} 'wim)
> or:
>   (conj  (set '(aap noot mies)) 'wim)


You could have also typed:

        (conj #{'aap 'noot 'mies} 'wim)

Which makes it clear that it's symbol evaluation that you're  
suppressing with the quotes.

--Steve


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to