#clojure logs

2008-06-17

02:22jcriteswhat class should I run to run a file rather than epl?
04:48StartsWithKhow would I do multimethod dispatch based on type?
05:11cgrandjcrites: clojure.lang.SCript
05:13cgrandStartsWithK: if you want to dispatch on parent class or interfaces, you can't
05:18StartsWithKhi
05:20StartsWithKwell i am not sure do i need this at all
05:20StartsWithKbut i think i would like to dispatch on [float float float] or [double double double]
05:20StartsWithKor something like that
05:21StartsWithKis something like that posible?
05:22cgrand[float float float] => your mutimethods take 3 args and they are all floats?
05:22StartsWithK(defmulti fun (fn [x y] [(class x) (class y)]))
05:22StartsWithKsomething like that
05:23StartsWithKis something like that right way to do it?
05:23cgrandit could work as long as you are dispatching on the actual type
05:24StartsWithKis there maybe some better way to do it?
05:24cgrandnone that I'm aware of
05:26StartsWithKi was planing to wrap parts of jogl, and for instance there are vertex[234][fdis..] functions
05:26StartsWithKand i would like to have just one vertex function in my code
05:27StartsWithKis this smart way to go about it?
05:27cgrandhmm I'm afraid that wrapping with multimethods is going to kill perfs
05:27StartsWithKi think so to
05:28StartsWithKbut maybe it won't be that bad
05:28StartsWithKits just i cant think of any other way to do it at all
05:29cgrandmacro or inline may be a better way
05:30StartsWithKwell if i use macro or definline for (defn color [r g b a] (. gl (glColor4? r g b a))
05:31StartsWithKso ? has to be i, f, d..
05:31StartsWithKi guess i could declare them all floats :)
05:32cgrandyou're right: macro or inline won't cut (my OpenGL is getting old)
05:33StartsWithKi blame jogl for having two places with type info for its arguments
05:53cgranda java helper class can allow you to get rid of the type suffixes, allowing you to use inlines (and the helper class methods would get inlined at runtime) but it requires writing some java :-(
06:42StartsWithKcolud i generate them with genclass?
06:42StartsWithKi didn't look to much into genclass lib but it soudls like it could be used for something like this
08:45asbjxrnrhickey, Hi, there was a commute question here yesterday about how it differs from eg. alter.
08:45rhickeyalter is a read-modify-write operation, so if another transaction does the same, one will roll back...
08:46asbjxrnAm I right that if two sync blocks each do an alter on the same ref one (or both) ro....
08:46asbjxrnrigt.
08:46asbjxrnbut commute does not roll back?
08:46rhickeycommute presumes the fn is commutative, so applies the fn to the current value of the ref at commit time, if another transaction does the same, it just lines up to do so, no rollback
08:47rhickeyso transactions that just inc counters or unconditionally add to maps need not have read-modify-write characteristics
08:47asbjxrnOk, but for that to be safe commute must be atomic, or am I wrong?
08:48rhickeyit is atomic, part of transaction commit
08:49asbjxrn? I thought a transaction commit only happened at the end of the sync?
08:50rhickeyright, your transaction will see a value for commit while running that might not be the value at transaction end, i.e. the commute will be done twice, once on the transaction temp value and finally on the ref during commit
08:51rhickeyso it can proceed seeing a non-zero counter or a map containing the added value
08:51rhickeyall sets are done to transaction temps until commit
08:52asbjxrnWhat I mean, if I do a (commute foo fun1 23) and while fun1 is running I do a (commute foo fun2 23) and fun2 finishes updataing foo before fun1 finishes.
08:52rhickeythese are separate transactions?
08:52asbjxrnyes.
08:52rhickeythen they don't see each other
08:53rhickeythey will commit in an order and the commutes will happen in that order
08:53asbjxrnYes, I think I understand now. Both are using the temp value seen at the start of the transaction...
08:53rhickeyplus their own mods to it
08:53rhickeyincluding commutes
08:54asbjxrnRight, I was thinking one commute would update the ref in all the refs in all the transactions. Didn't occur to me that it could be postponed until the end of the transaction.
08:55rhickeynothing shared changes until commit
08:59asbjxrnClojure really force me to think about variables in a different way from what I'm used to.
08:59asbjxrnTakes some time to get all the concepts lined up in my mind.
09:05rhickeycommute is definitely different, actually an old database thing called field calls:
09:05rhickeyhttp://books.google.com/books?id=S_yHERPRZScC&pg=PA431&lpg=PA431&dq=database+%22field+calls%22&source=web&ots=JJluVOMDxm&sig=Pw2OK3MnzamxuUcCNEBHuRuGY6c&hl=en&sa=X&oi=book_result&resnum=5&ct=result
09:07asbjxrnHeh, I wonder what your reference database looks like, you seem to throw links like that out all the time.
09:07rhickey:) that's a great book, highly recommended
09:09cemerickis anyone aware of anyone working on generating javadoc-esque documentation from clojure source?
09:09Chouserrhickey: thanks for explaining commute. I should have realized it was just deeper magic than I was allowing for.
09:09rhickeyChouser: sure, sorry I missed it yesterday, was in a rare (for me) meeting
09:10rhickeycemerick: the API page of the docs is generated from the source
09:10Chouserrhickey: np. nothing urgent about it. I suppose I could have tried to read the source.
09:11rhickeyChouser: seems a shortcoming of the docs if it wasn't clear
09:11Chouserare the "for Java Programmers" slides up anywhere? Mind if I steal a few?
09:11blackdogwould it be useful to have a javadocs thing with @author etc interpreted and xrefs? could be a good project
09:12asbjxrnI tried... But the (commute ref fun args) just became (commute fun args) :) I guess the magic was in the java source which really is magic to me.
09:13blackdogrhickey, or would that be better left to metadata?
09:14rhickeyblackdog: metadata
09:14blackdogok
09:14cemerickrhickey: Yeah, I figured. I'm turning around various documentation ideas. Perhaps it'd be more reasonable to generate javadoc stuff from gen-class output...
09:15rhickeygen-class could have more gen definitely, including Clojure stubs
09:15blackdogcemerick, the enclojure plugin for netbeans has code which generates it all in a tree for you
09:15blackdogand it's a stand alone swing jpanel
09:16blackdogcljNamespaceBrowser.clj
09:16StartsWithKrhickey, is something like this http://pastebin.com/d3b2658f6 a bad idea?
09:16blackdogif you run that you get most of what you're looking for
09:16rhickeyChouser: http://groups.google.com/group/clojure/web/clojureforjava.pdf
09:17Chouserthanks
09:18blackdogrhickey, have you defined standard meta tags then ? for author etc, or documented them so we all use the sasme
09:18blackdogkeys
09:19Chouserpretty tedious to tag every var in a file with the same author string
09:19rhickeyblackdog: just by usage, if using your own, use a ns prefix.
09:19blackdogyes but for 3rd party tools
09:20blackdogso docs could be cross referenced etc
09:20rhickeymetadata for namespaces has been requested
09:20Chouseryou could put file-level stuff in per-namespace map. foo/*meta* or something
09:20rhickeyStartsWithK: what is your goal with that?
09:21StartsWithKi would like to wrap parts of jogl
09:21StartsWithKso there woudn't be color3f color4f color3d color4d...
09:21rhickeyugh
09:21StartsWithKjust one color, normal, vetex etc.. function
09:22rhickeythey letters at the end are types?
09:22StartsWithKyes
09:22rhickeythat is goofy for a Java lib
09:22StartsWithKfunction[number-of-args][arg-type]
09:22asbjxrnStandard openGL naming.
09:22StartsWithKyes, just wrapped opengl
09:22rhickeyare the args of uniform type, e.g. 3 floats or 3 doubles?
09:22StartsWithKyes
09:23rhickeyyou can just dispatch on the type of the first then
09:23rhickeysave some overhead
09:23StartsWithKbut you have color3f color3d and color4f color4d
09:24rhickeyright, still arity overloaded
09:24StartsWithKyes :/
09:25StartsWithKanother suggestion was i write thin java wrapper to remove types from names..
09:25rhickeyif you do that, you can combine it with definline or macros for optimal speed
09:26StartsWithKand i was looking at genclass to use it instead of java
09:26StartsWithKbut i can't figure out how it should be used
09:26asbjxrnIf you're writing a wrapper for parts of openGL, would it be acceptable for you to just select one type and stick with that?
09:26rhickeygenclass is not for from-scratch Java class implementation
09:27rhickeyit's for class/interface extension/implementation
09:27pjb3hey, the website looks great!
09:27StartsWithKasbjxrn, it would work i guess..
09:27rhickeyelse it would have to have all the cruft of Java, field types, access modifiers etc
09:27StartsWithKi see
09:27rhickeypjb3: thanks, my brother Tom did it
09:28StartsWithKthen java + definline would work the best i guess
09:28rhickeyStartsWithK: yes
09:28StartsWithKthanks
09:29rhickeyStartsWithK: but what about asbjxrn's suggestion, just use one type?
09:31StartsWithKrhickey, i have something like that right now, but i call dem colorf colord and then i can just (def color colorf) if floats will be used
09:33asbjxrnI haven't used openGL enough to understand the tradeoffs between the different typed functions. Can you explain? (if it can be done in a concise manner.)
09:34asbjxrn(kinda off-topic here, I guess.)
09:35StartsWithKi wish i could explain, but i just started with opengl, so just wanted to duplicante the api without messing something up with my assumptions
09:36asbjxrnOk, never mind. I was just curious.
09:36pjb3Where is load-file defined?
09:37rhickeypjb3: RT.java
09:39pjb3rhickey: Why not in boot.clj?
09:40asbjxrnSounds like you would be ok just going with floats: "OpenGL uses floats internally, an using anything other than the single-precision floating-point functions adds a performance bottleneck because the values are converted to floats anyhow before being processed by OpenGL"
09:40rhickeypjb3: what would load boot.clj?
09:40asbjxrnMakes you wonder why they added the other typed functions..
09:40yrbasbjxrn: I belive it comes from the "performance" crowd, memory space vs precision trade offs mainly
09:40pjb3ah
09:41pjb3I knew there would be a good reason :)
09:41asbjxrnThat quote is from OpenGL SuperBible. (I had a plan of learning openGL once..)
09:43yrbasbjxrn: I am porting a couple of the examles and doing a port of ants.clj, but man is jogl ugly
09:44yrbasbjxrn: looks like a c library but worse because they have shoehorned bits into classes
09:44asbjxrnObviously StartsWithK is then responsible for making a edible wrapper.
09:45StartsWithKasbjxrn, thanks, so i guess ill just create it with floats only
09:47yrbI have ditched it all for maps of "floats" basically is my little wrapper
09:48yrbI don't think the way I am heading is going to preform all that well, but I am mainly aiming for it being good for toys
09:55asbjxrnEven toys might be hampered with bad performance. My graphic toy lib lags on my once top-of-the-line 667 Mhz powerbook if I'm not careful.
10:09cemerickwould I be better off using building enclojure from svn head, instead of using the current public build?
10:41StartsWithKhg clone http://freehg.org/u/kresimir/neman/
10:42StartsWithKyou will need lib.clj from clojure-contrib
10:42StartsWithKand there is simle-jogl that show how it will look one day :)
10:42StartsWithKand jogl in classpath
10:56yrblooks good :)
10:56yrbA
10:57StartsWithKill try to do rest soon, and if you wish just browse the source http://freehg.org/u/kresimir/neman/
10:58yrbhave you looked at java3d
10:58StartsWithKyrb, how did you deal with arrays? i now get te same problem with vertex3v and vertex4v variations..
10:59StartsWithKyrb, i did a little, but it looked to complicated
11:01yrbI used a small map for my vecs
11:05yrbusing a map instead of a vector is very convenient
11:06rhickey_yrb: how so?
11:09yrbwell if i call Vertex2 it just pulls out the :x and :y keys and can us the :or to provide defaults, so if you call Vertex3 with an map that only has :x, :y it can default :z
11:09yrbuse*
11:10rhickey_ok
11:18yrband the (:key map) syntax is very nice :)
11:19rhickey_yrb: if you are going to have a lot of those, consider using a StructMap
11:21pjb3Can you have a function that has keyword parameters?
11:22pjb3so you can call it like (it :foo 1 :bar 2) or (it :bar 1 :bang 2)
11:22yrbI have a StructMap for points, what are the performance characteristics of additional keys like
11:23rhickey_yrb: like map's generally
11:24rhickey_pjb3: I take a rest arg (&) of key val key val..., then apply hash-
11:24rhickey_map to it and destructure in the body, e.g. see refer or gen-class.
11:24pjb3ok, that
11:24pjb3's what I thought
11:43drewrrhickey_: I implemented a function similar to FILTER which takes a sequence and returns a lazy seq.
11:43drewrI found that the (when (seq coll) ...) form was needed to read in the seq lazily.
11:43drewrI don't understand why.
11:44drewrYou're not storing the value of the SEQ call. How does it affect coll?
11:44rhickey_that's a test to see if there's anything to do
11:44drewrYes, but without it, my function would blow the heap.
11:45drewrIt would try to consume the whole coll.
11:45rhickey_want to paste it?
11:45drewrSure.
11:46lisppaste8drewr pasted "LAZY-CONS in WHEN SEQ" at http://paste.lisp.org/display/62376
11:47drewrIf I don't wrap the LAZY-CONS in that WHEN, the function works, but it tries to consume all the messages (at least, that's my perception because it runs out of heap space).
11:48rhickey_your fn is same as (partial map attach-message-details)
11:49drewrThanks, I figured there was a built-in way to do something in the middle of the stream.
11:49rhickey_be careful testing on long inputs right in the repl, as your args are on the repl's stack (i.e. it keeps the head), unless you wrap with (let [] ...) or times
11:49drewrHm. They're coming from a database.
11:50drewrI created a function which runs a query in batches and returns the rows as lazy stream.
11:50rhickey_when has nothing to do with the laziness, just tells you when you're done, maybe an infinite loop caused heap exhaustion?
11:51rhickey_i.e. without when, how will it stop?
11:51drewrI figured the seq coming in would let it know. :-)
11:51drewrThat's probably what it was then.
11:52drewrI knew the SEQ didn't have side effects so I wasn't sure what was happening.
12:05yrbStartsWithK: Misread your question before...(too much api exposure) I have chosen not to really deal with arrays yet, since I didn't need them for the particle rendering I was going
12:11StartsWithKyrb, thats ok, i was just trying for a while to picture how i should do that :) i'll skip them too for now
12:11yrbThere are 2040 constants for GL ...
12:11yrb2640*
12:14yrbStartsWithK: I thinking of moving over to j3d over jogl
12:16StartsWithKyrb, maybe you should check out http://www.jmonkeyengine.com/ too
12:17StartsWithKi never used it, but it looks like it has everything j3d
12:20yrbhrmmm, I am mainly looking to do visualisation
12:22yrbthough it looks very cool
12:24yrbman j3d still exposes you to the the whole blah{2,3,4}{d,f}
12:31yrbJavamonkey looks quite sane however
12:33yrbJMonkey Engine*
13:01yrbStartsWithK: I really like the pattern matching dispatch :)
14:44Lau_of_DKIs there any documentation on Swing Eventlistners vs. Clojure ?
14:47Lau_of_DKmainPanel.addMouseListener(new java.awt.event.MouseAdapter() {
14:47Lau_of_DK public void mouseClicked(java.awt.event.MouseEvent evt) {
14:47Lau_of_DK onPanelClick(evt);
14:47Lau_of_DK }
14:47Lau_of_DK });
14:47Lau_of_DKThere curlies are throwing me a bit off, is there a clever way to implement this in Clojure ?
14:50cgrandproxy?
14:50Lau_of_DKI dont think that you proxy listners, Im not trying to override something like I would with Paint for instance
14:52Lau_of_DKwait
14:52Lau_of_DKI think you're right
14:52cemerickI think proxy is the way to go.
14:52Lau_of_DKlemme think this through
14:53cemerickLau_of_DK: Note the "simple example gui application" here: http://en.wikibooks.org/wiki/Clojure_Programming
14:54cemerickI think I saw a sample somewhere that used a macro that allowed you to pass a fn instead of explicitly using proxy, and the macro would line the fn up with the interface to be implemented
14:54cemerickOf course that'd only work for an interface that has a single function.
14:55Lau_of_DK(def *panel* (doto
14:55Lau_of_DK (JPanel. (MigLayout.))
14:55Lau_of_DK (addmouseEventListener
14:55Lau_of_DK (proxy [MouseAdapter] []
14:55Lau_of_DK (on-click)))))
14:56Lau_of_DKThis works, but I need to ship some MouseArgs to MouseAdapter, but any args added causes an Unable to Resolve Symbol error... why? :)
14:59Lau_of_DKI dont fully understand the syntax, but this works
14:59Lau_of_DK(def *panel* (doto
14:59Lau_of_DK (JPanel. (MigLayout.))
14:59Lau_of_DK (addMouseListener
14:59Lau_of_DK (proxy [MouseAdapter] []
14:59Lau_of_DK (on-click [evt])))))
14:59Lau_of_DKNevertheless, it does not seem to fire (on-click) when I click the panel
15:04cgrandI presume you defined a on-click function and expect it to be called?
15:04Lau_of_DKyes sir
15:04Lau_of_DK(defn on-click
15:04Lau_of_DK [g]
15:04Lau_of_DK (println "Click"))
15:05cgrand (mouseClicked [evt] (your) (code) (here)))))) instead of (on-click [evt])))))
15:07Lau_of_DKThat compiles as well, but nothing is firing
15:11Lau_of_DKcgrand, does it fire in your camp ?
15:24cgrandyes: (def f (javax.swing.JFrame.)) (.show f) (.addMouseListener f (proxy [java.awt.event.MouseAdapter] [] (mouseClicked [e] (println "Click") (flush))))
15:29Lau_of_DKThat works, thanks alot cgrand
15:49rhickey_anyone got a regex that I can use to remove non-double newlines? For the generated API docs I'd like to get rid of single newlines so it flows better.
15:51drewrrhickey_: #"[^\n]\n[^\n]"
15:51drewrOr..
15:51drewr#"[^\n]\w*?\n\w*?[^\n]"
15:52drewrPerhaps. Depends on how predictable the input is.
15:53ChouserJava and emacs do regex very poorly, worse even than sed
15:53drewrYou could do it with a DFA, but that would be a little overkill.
15:54Chouser#"(?<!\\n)\\n(?!\\n)"
15:54Chouserbut you want to remove them? re-seq does the opposite of what you want.
15:55rhickey_String.replaceAll ?
15:56Chouserhm, takes a String, not a Pattern.
15:57rhickey_docs for it say:
15:57rhickey_ An invocation of this method of the form str.replaceAll(regex, repl) yields exactly the same result as the expression
15:57rhickey_ Pattern.compile(regex).matcher(str).replaceAll(repl)
15:57rhickey_so I could do that
15:58drewrIf the docs are generated, why not fix whatever's generating the single newlines?
15:58rhickey_the newlines work in the source, and for the doc function
15:58drewrSo you are munging the docstring as you output it.
15:59rhickey_yup
15:59Chouseryeah, that looks good: (.replaceAll (.matcher #"(?<!\\n)\\n(?!\\n)" text) "")
15:59rhickey_thanks all
15:59Chouseror drewr's regex of course would be fine too.
16:03drewrIf I've got something long-running that I'd like to kick off, but still have control of my REPL, is the best technique to accomplish that manually creating a Java thread for the function to run in?
16:03Chouseryou could use send-off
16:05rhickey_FYI, API page in docs now has anchors: http://clojure.org/API#map
16:05drewrChouser: Ah yes, I remember that from ants.clj. Thanks.
16:05drewrrhickey_: Very nice. I like the new site a lot.
16:07Chouserrhickey_: thanks, that'll be useful.
16:08Chouserpartition won't generate a short list at the end. Is that intentional?
16:09Chouser(partition 2 [1 2 3 4 5]) => ((1 2) (3 4)) not ((1 2) (3 4) (5))
16:09rhickey_yes, because it now takes steps as well
16:10Chouserah!
16:11rhickey_user=> (partition 3 2 (range 10))
16:11rhickey_((0 1 2) (2 3 4) (4 5 6) (6 7 8))
16:11Chouseryeah, I saw the step, but here's what I thought I wanted:
16:12Chouser(map first (partition 2 (range 5))) from which I wanted (0 2 4)
16:13Chouserbut (map first (partition 1 2 (range 5))) gets it
16:13Chouser(apply str (map first (partition 1 2 (re-split #"(?<!\\n)\\n(?!\\n)" text))))
16:13Chouserheh. ok, anyway...
16:14rhickey_partition mimics Mathematica's partition, for these simple cases
16:15rhickey_(range 0 5 2)
16:15ChouserOh, Mathematica! right!
16:15Chouserhm, tone of voice doesn't carry very well over IRC.
16:16rhickey_Mathematica is very cool
16:16rhickey_Every programmer should see it, just as they should a good Common Lisp environment
16:17rhickey_see how the other half lives :)
16:18ChouserBack when I still did math more complicated than flubbed attempts to apply the Rule of Cosines (college, in other words), I took a run at Mathematica.
16:18ChouserBut it was a short run, and I lost. I don't think I had good use case.
16:18rhickey_it's really a Lisp, with great data visualization tools
16:20Chouserso -> is a port of //
16:20rhickey_I can't grok their syntax, so use long names
16:21ChouserI don't know what I'm talking about. I just had a vague recollection of Mathematica being postfix.
16:21ChouserApparently I'm wrong in the general case, but it provides a//b as a form of b[a]
16:22rhickey_#(%1 %2) is Mathematica-esque, %& being my addition
16:22Chouserjust like (-> a b) is (b a)
16:22rhickey_-> is most like Mathematica Thread, IIRC
16:28Chousersurely visualiztion functions could be dropped into clojure
16:29rhickey_I would hope so, given all the graphics options available to Java
16:33Lau_of_DKHow is an Unsupported Operation Exception ?
16:33Lau_of_DKHow = What
16:34Lau_of_DK(. *frame*
16:34Lau_of_DK (addPropertyChangeListener
16:34Lau_of_DK (proxy [PropertyChangeListener] []
16:34Lau_of_DK (propertyChangeEvent [evt]
16:34Lau_of_DK (println evt)))))
16:34Lau_of_DKThis for instance - Will throw one such
16:35rhickey_with proxies, chances are you are failing to implement a method that the consumer of the proxy calls
16:36Lau_of_DKk
16:37Lau_of_DKyea, you're right rhickey, it expected propertyChange()
16:47drewrWhere does *agent* come from in ants.clj?
16:47drewrIt doesn't get defined anywhere, only used in SEND-OFF a couple times.
16:48ChouserIt's bound to the current agent.
17:00Chouserhttp://clojure-log.n01se.net/date/2008-04-05.html
17:04drewrHeh, thanks.
18:05rhickey_I've added experimental static member access classname/member, work for fields with no parens Math/PI, or static method invocations (Math/sqrt 42)
18:10drewrSweet. Consistent with package naming.
18:11rhickey_feels right, so far
18:11pjb3Can you add jars to the classpath after the JVM has started?
18:12rhickey_pjb3: http://clojure.org/API#add-classpath
18:12pjb3excellent
18:12rhickey_but if it's something you'll use often, best to add it to your real classpath at some point
18:14pjb3Can you say "put all the jars in this directory" on the classpath, or you do you have to list them individually when you start the JVM?
18:28drewrlisppaste8: url
18:28lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
18:28pjb3When I do (add-classpath "file:///Users/pbarry/projects/clojure/mysql-connector-java-5.1.6.bin.jar")
18:28pjb3then (.newInstance (.forName Class "com.mysql.jdbc.Driver"))
18:28pjb3I get class not found
18:29lisppaste8drewr pasted "partial function with side effect" at http://paste.lisp.org/display/62396
18:30drewrrhickey_: I'm trying to interject a function in the middle of a stream to increment a ref, but it doesn't increment, and the messages don't come out the other side. Any thoughts?
18:35rhickey_pjb3: add-classpath won't work for JDBC drivers, which need to be visible to System Classloader
18:35drewrrhickey_: Actually, scratch that. Those functions seem to work. I think my problem lay elsewhere.
18:35drewrAlthough, is that invocation of PARTIAL what you had in mind earlier?
18:36pjb3rhickey_: Ok, so I have to specify those with -cp when I start the JVM?
18:37drewrNo, I needed to return the message in INC-MESSAGE-COUNT.
18:37rhickey_drewr: no the partial call shouldn't include all args, and I don't think you need it here at all, make sure you force the evaluation of the lazy map call with doall or dorun
18:37drewrrhickey_: Can I keep it lazy as it passes through?
18:38drewrI don't want it to consume the seq. I need to chain more stuff to it.
18:58drewrOK, my PARTIAL solution works; I just have to make sure to return the object from the seq in my mapped function.
19:04shizzy0Hello
19:05shizzy0I'm getting familiar with Clojure, and I was curious about what the '#' means.
19:08shizzy0[Finds it.] Ok, so #'x means (var x). How similar is this to Common Lisp's use of #'function?
19:35rhickey_shizzy0: it means something totally different, as Clojure is a Lisp-1, and the use it almost the opposite, where in CL you'd use #' to get the function value, in Clojure you use #' to avoid getting the value, getting the containing var instead
21:03mnesticis there a chat log of #clojure anywhere?
21:07Ycrosmnestic: I think there is because a google search of mine once hit one
21:10mnesticYcros: ahh, found it
22:03shizzy0thanks, rhickey_ for the response (a few hours ago).