#clojure log - Feb 14 2010

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

1:03 piccolino: Is there some way to test if a vector has a certain element in it?

1:04 hiredman: .contains

1:04 ,(.contains [1 3] 3)

1:04 clojurebot: true

1:05 piccolino: Thanks.

1:13 Oh, that only works on vectors.

1:21 hiredman: piccolino: no, the .contains method is part of the interface for java Collections, works on any Collection

1:21 ,(.contains '(1 2 3) 3)

1:21 clojurebot: true

1:21 hiredman: ,(.contains (seq '(1 2 3)) 3)

1:21 clojurebot: true

1:21 piccolino: Hm, I had tried it on a map.

1:23 zaphyr: how do i specify a void return value in a :methods section?

1:24 hiredman: ,(instance? java.util.Collection {})

1:24 clojurebot: false

1:24 hiredman: ,(instance? java.util.Collection (seq {}))

1:24 clojurebot: false

1:24 hiredman: on

1:24 ,(instance? java.util.Collection (seq {:a 1}))

1:24 clojurebot: true

1:25 hiredman: zaphyr: did you try void?

1:26 * zaphyr looks at his shoes

1:26 zaphyr: no. :)

1:26 hiredman: I don't recall for sure, but I would try it

1:28 no_mind: is clojure google group moderated ?

1:28 zaphyr: hiredman- instant win. ta :)

1:35 hiredman: no_mind: yes

1:36 google groups apparently have a pretty serious spam problem for people who don't read them via gmail

1:53 no_mind: ok, that is why my post did not appear :)

1:55 hiredman: it used to be only the first post had to be approved, but spam spoofing addresses of group members started to show up

2:24 defn: Anyone here use libcurl with clojure at all?

4:01 zaphyr: hmm. weirdness. i am trying to :use a regular clojure namespace within a :gen-class namespace

4:01 compilation works fine- but when i try to instance it i get error: java.lang.NoClassDefFoundError: Could not initialize class ui.action (ui.clj:21)

4:03 Chousuke: how are you instantiating it?

4:03 zaphyr: (ui.action. title)

4:03 Chousuke: is that the full namespace? :/

4:04 zaphyr: yep

4:04 i know, that's a naughty namespace :)

4:04 Chousuke: and you have the classes/ dir in your classpath and all?

4:04 zaphyr: yep

4:04 Chousuke: hm

4:04 zaphyr: i can even disassemble it with javap

4:04 the class *is* there

4:05 Chousuke: did you define the init function?

4:05 zaphyr: yep

4:05 i'm doing some magic in post-init

4:05 * Chousuke is making sure everything is plugged in :P

4:05 zaphyr: np ;)

4:05 Chousuke: hmm. :/

4:06 zaphyr: http://paste.lisp.org/display/94930

4:06 that's the code for ui.action

4:06 i switched the :use to a :require to see if it made any difference, which it didn't :S

4:08 http://paste.lisp.org/display/94931

4:08 that's the contents of ui.util

4:08 (a truly horrible function that could probably be a one liner, yea yea :))

4:10 Chousuke: hmmh :/

4:11 I wish the error message were a bit more descriptive

4:12 can you try instantiating the thing in a repl and then print the whole stacktrace?

4:12 though since it's a NoClassDefFoundError it's probably some classpath gotcha

4:13 and by the way, the actionPerformed method has a potential race

4:13 zaphyr: http://paste.lisp.org/display/94932

4:13 oh really?

4:13 oh, of course

4:14 Chousuke: you should do (when-let [x @(.state this)] (x))

4:14 zaphyr: fixed, ta

4:15 now i suppose i will see if i can put together a minimal example of this weirdness...

4:15 Chousuke: you did restart slime after you compiled the namespace, right?

4:15 zaphyr: several times :S

4:16 Chousuke: I wonder what that ui$eval... thing is :/

4:16 looks like a single-segment namespace :P

4:16 zaphyr: ;)

4:16 it is, horrors, it's in (ns ui)

4:16 Chousuke: hm

4:17 zaphyr: maybe i should stick another directory up there

4:17 Chousuke: you should

4:17 single-segment namespaces can cause weird problems.

4:19 I doubt changing it will actually fix your problem, but at least it's not so evil anymore :)

4:22 zaphyr: nup. same old.

4:22 but, at least i can sleep at night now

4:46 hmm. kids? don't use single level namespaces. that does seem to cause the issue

5:07 ordnungswidrig1: moin

6:29 LauJensen: Good afternoon team

6:33 zaphyr: bleh. anyone else find that (javax.swing.SwingUtilities/invokeAndWait #(javax.swing.JFileChooser.)) from the slime repl hangs everything dead?

6:33 (under win32 at least)

6:35 LauJensen: ehm... you said 'hang' and 'windows'.....

6:35 zaphyr: =P

7:36 underdev: is there a way that i can coerce a list of symbols to return a list of strings with each string the textual value of the symbol?

7:36 ie autoquote, or barewords

7:37 Chousuke: ,(map str '(foo bar))

7:37 clojurebot: ("foo" "bar")

7:37 StartsWithK: (map name sym-seq)

7:38 Chousuke: name will leave out the namespace portion

7:42 Kenny164: Hi all

7:43 I'm having troubles with getting enlive to work in emacs, looked like a classpath error, but its ok on the clj?

7:56 underdev: thanks guys\

8:02 speaking of emacs (i don't know enlive), i picked up the oreilly emacs extension book for $5 +s/h, there are more for that price if anyone wants one

8:03 its like tcl, one of the great things is that one can purchase an entire library for $3 a book

8:05 Kenny164: yeah, I think i'll be getting a few books, heh, I could do with them, google's letting me down badly (too much cruft)

8:06 underdev: oic, enlive is clojure

8:06 oooh, neat

8:06 Kenny164: yeah, another clojure library

8:07 for webscraping. I've used lxml for this sort of work in python, but thought i'd try dipping into clojure

8:11 underdev: really love some of pythons libs (pygnents + moinmoin ftw), but never really loved python

8:11 pygments*

8:13 Kenny164: my love for python started fading when i tried going async

8:14 this time last week I wasn't even aware of the GIL

8:34 LauJensen: Fun to look at the search terms which generates traffic, like "work clj but no emacs" or "scala tutorial" :)

8:35 underdev: you should google bomb your site for "scala tutorial"

8:35 the world will thank you

8:36 eventually

8:45 Chousuke: does anyone know how to properly build Clojure using maven? neither mvn compile nor mvn install seem to do anything useful :/

8:45 mvn install creates an empty jar and puts it in the local repository :P

8:46 ikitat: ant

8:47 the pom.xml doesn't seem to be configured for a build

8:47 Chousuke: that's what I'm wondering.

8:48 it's just that leiningen uses maven and I'd like to have it use my own version of 1.2.0-snapshot :P

8:48 and I would like to know how to use maven to build and install one.

8:48 ikitat: clojure-contrib is being built with maven

8:49 Chousuke: these tools thoroughly confuse me.

8:49 ikitat: you can use mvn install-file or something like that

8:49 it'll put the jar into your local repo

8:50 Chousuke: I'll try that.

8:50 ikitat: mvn install:install-file

8:50 http://maven.apache.org/plugins/maven-install-plugin/usage.html

8:54 Chousuke: hm, looks like it worked.

8:54 ikitat: Chousuke: you can probably just mvn install:install-file -Dfile=clojure.jar -DpomFile=pom.xml

8:54 Chousuke: these tools are way too flexible :P

8:55 ikitat: maven can be really frustrating at first

8:55 then again, making a custom build.xml can be frustrating too

9:38 * ikitat thinks clojure.contrib.sql shouldn't assume it's running in an environment where printing output is appropriate

9:39 * ikitat thinks clojure.contrib.sql shouldn't wrap sqlexception in exception

9:39 Chousuke: ikitat: maybe you just need to bind *out* to something

9:42 ikitat: should all libraries print errors then bury specific exceptions into more general exceptions?

9:43 we shouldn't expect running a database command to print anything

9:44 Chousuke: perhaps not.

9:44 ikitat: even if it does fail, just let the sqlexception propegate

9:45 but even then, it jams the sqlexception into exception and throws! That (I think) is bad form as it is unecessarily hiding detail

9:45 Chousuke: I wonder why it's wrapping the exception though.

9:45 ikitat: it's using throwf from c.c.except

9:46 Chousuke: Sometimes Clojure needs to wrap things in RuntimeException to get around checked exception limitations but hm.

9:46 ikitat: that's not the case here, because you can throw and catch an sqlexception just fine (even though it is a checked exception)

9:46 but wait, there is more

9:47 c.c.sql expects that *err* has a .println method (which isn't really part of the contract for *out* and *err*)

9:48 Chousuke: actually I think it is.

9:49 (doc *err*)

9:49 clojurebot: "; A java.io.Writer object representing standard error for print operations. Defaults to System/err, wrapped in a PrintWriter"

9:49 Chousuke: hmm

9:49 ikitat: so it defaults to printwriter which has .println

9:49 but java.io.Writer doesn't have a .println

9:50 with all of that, I think c.c.sql is making a few incorrect assumptions

9:50 Chousuke: You could post on the group about it.

9:51 this rant will probably be missed by all the relevant people :)

9:51 ikitat: it's a good idea, I'm going to print out a contributor agreement too so I can submit a patch too

9:51 :)

9:52 Chousuke: heh

9:52 ikitat: I dunno, I think the irc logs contain more useful info than the group most days :)

9:52 Chousuke: Well, yeah

9:52 but it's still easy to miss important bits

9:53 ikitat: I'll write it up in a moment

9:53 underdev: disclojure's intertweets are very good too

9:54 tbatchelli, if you are here, THANK YOU

9:54 ikitat: "Discussions aren't available right now. We're sorry. Try again shortly."

9:54 doh

10:01 underdev: anyone know a way to get slime-repl clojure to report errors in its own buffer instead of opening another one?

10:02 or open the error replace its own buffer with the error instead of knocking out my clojure file's buffer?

10:02 or freaking anything but the default behavior???!?!

10:42 konr: Haha, I'm addicted to -> and ->>. Is it bad style to use them all the time?

10:44 Chousuke: :P

10:47 ikitat: uhg, google groups just swallowed my post :P

11:27 google groups says my post was successful but doesn't display it!?

11:27 things are not going my way today

11:32 qbg: ikitat: It be undergoing moderation

11:32 *it might be

11:35 no_mind: ikitat, the group is moderated

11:36 ikitat: ah, too bad google groups didn't mention that when I submitted :P

12:02 konr: Is there a way to run (foo) and if it raises an exception, return "bar"?

12:04 Chousuke: (try (foo) (catch Exception e "bar))

12:04 oops, missing quote :P

12:05 I want paredit on irc :(

12:06 konr: haha thanks!

12:17 avarus: hi

13:04 hamza: guys, assuming i have the following two vectors [:a :b :c] [1 2 3] how can i turn this into [:a 1 :b 2 :c 3] ?

13:04 Chousuke: ,(interleave '[a b c] [1 2 3])

13:04 clojurebot: (a 1 b 2 c 3)

13:05 hamza: Chousuke: thanks a lot...

13:37 wgl: Any users of slime for clojure using the latest version? I am getting odd hangs with the 2010-01-14 version.

13:37 jlilly: I'm actually having issues with slime / clojure as well. Getting a "not connected" error.

13:39 wgl: jlilly: I went back to the 2009-06-05 version and it seems to be working so far.

13:39 jlilly: thx, I may try that.

13:40 ikitat: the latest in ELPA seems to be 20091016 which is working well for me

13:41 jlilly: hmm. thinking my issue is slime moreso than clojure. :-/

13:42 m-x slime apparently fixed it.

13:43 qbg: Starting SLIME tends to help

13:43 jlilly: :-P

13:44 qbg: My only issue is that I need to add clojure to slime-lisp-implementations, even though swank-clojure should do that automatically.

13:53 bosie: anyone knows what i have to do to get a proper REPL console in Terminal.app under macosx?

13:53 ikitat: java -cp clojure.jar clojure.main

13:53 bosie: ikitat: yea but pressing the cursor results in 'user=> ^[[A'

13:54 ikitat: rlwrap or jline will help with that

13:54 http://clojure.org/getting_started shows usage with jline

13:57 bosie: ikitat: interesting

13:58 ikitat: worked. thanks.

14:53 Raynes: Ioke's git repo is insanely large.

14:54 Unreasonably large. :|

14:57 Chousuke: Raynes: does it contain binaries or something? :/

14:57 Raynes: Chousuke: It must. It's like 300+ mb.

14:59 Chousuke: hm

15:10 bosie: is there a site/tutorial explaining how one would group functions in lisp/clojure?

15:15 ikitat: bosie: clojure uses namespaces for grouping functions

15:15 bosie: you can look at the code in clojure-contrib for some good examples

15:15 bosie: ikitat: thanks

15:19 Chousuke: I suppose the functions of a single namespace should share a common "theme"

15:21 seths: a namespace seems more like a layer than a group

15:21 since cyclic dependencies aren't supported

15:24 Raynes: chouser: You and fogus aren't writing fast enough for my taste. Get busy. :p

15:48 LauJensen: Agreed - Raynes, play the banjo to get them started!

15:48 Raynes: ;)

15:51 ordnungswidrig1: Is maven the next best alternative to leiningen for multi-project builds?

15:53 Raynes: Leiningen is the best alternative to Leiningen when you can't use Leiningen.

15:54 Chousuke: :P

15:56 icey: I'm not sure which version of clojure I should be speficying in my project.clj. If I use 1.1.0-new-SNAPSHOT, congomongo doesn't work. If I use 1.1.0-master-SNAPSHOT, "lein compile" has problems. Which version are you guys using?

15:56 patrkris: does anyone know where the source code for lein-nailgun can be found?

15:57 Raynes: I use 1.2.0-master-SNAPSHOT, but I don't have any dependencies that require I don't.

15:57 icey: Raynes: is that fairly stable right now?

15:58 Raynes: icey: I suppose so. It's just snapshots of the current git repositories.

15:59 icey: hmm, gonna give that one a go and see what happens :D

16:03 yeah, it looks like congomongo is picky about the clojure version it has available

16:03 LauJensen: ordnungswidrig1: Had a look at Clojuresque, the Gradle plugin ?

16:04 ordnungswidrig1: LauJensen: not yet.

16:05 LauJensen: but I sounds like a good idea

16:05 LauJensen: Have a look at kotka.de/blog

16:08 icey: hummm... it looks like I must have been doing something wrong. I reconfigured for 1.1 master, ran lein clean, lein deps and lein compile and now everything is working well together

16:09 i can only imagine how painful this would have been without lein though; definitely happy it's around

16:17 LauJensen: One great thing about it is the simplicity. I'm regularity putting my blogpost code in lein projects, because people can get the code, get the deps and run it in less than a minute

16:29 icey: LauJensen: Actually, one of your blog postings is what made me take another look at lein :D

16:29 LauJensen: Really - Why ?

16:31 icey: Because it looked really nice and easy to create the uberjar (from the reddit clone post)

16:31 I don't know anything about javaland, so it was attractive to me that it took care of it all

16:31 LauJensen: ah ok

16:32 Yes actually thats an insane amount of deployment power you get in about 10 lines of lein

16:32 "10 leins" :)

16:32 icey: lol; yeah.. between clojars / lein deps and the deployment story, it makes for a very compelling reason to use it

16:33 technomancy: ordnungswidrig1: someone has some patches to leiningen for multi-module builds, but they won't be merged until after the 1.1.0 release

16:34 ordnungswidrig1: hmm, how can I pass a bindig into a fn definition?

16:34 (def x nil)

16:34 (trace "X" ((binding [x "X"]

16:34 (fn [] x))))

16:34 this gives "nil"

16:34 technomancy: ok, thanks.

16:36 technomancy: is there anything like elisp's "provide" function that will cause "require" to know that an ns has already been loaded?

16:36 even if the file corresponding to it may not have been required?

16:40 sunkencity: where can I find a list of predicates in clojure? looking for something like "atom" in common-lisp, how can I check that? Not a sequence?

16:42 technomancy: ,(filter #(re-find #"\?$" (name (first %))) (ns-publics 'clojure.core))

16:42 clojurebot: ([keyword? #'clojure.core/keyword?] [chunked-seq? #'clojure.core/chunked-seq?] [instance? #'clojure.core/instance?] [sequential? #'clojure.core/sequential?] [fn? #'clojure.core/fn?] [nil? #'clojure.core/nil?] [string? #'clojure.core/string?] [sorted? #'clojure.core/sorted?] [false? #'clojure.core/false?] [true? #'clojure.core/true?] [odd? #'clojure.core/odd?] [symbol? #'clojure.core/symbol?] [future-done? #'clojure.core/fu

16:42 technomancy: sunkencity: ^

16:42 morphling: sunkencity: coll? is true for collections

16:42 sunkencity: technomancy: thanx!

16:45 morphling: thanx, coll works fine!

17:02 piccolino: I am all out of ideas on my problem here. Anyone see anything I don't? http://gist.github.com/304292

17:05 chouser: try 'next' instead of 'rest', just for kicks.

17:05 piccolino: Yeah, I already did, it gives the exact same result.

17:09 Raynes: Oh no. The dreaded NullPointerException.

17:09 ordnungswidrig1: ,(binding [g 1] ((fn [] g)))

17:09 clojurebot: java.lang.Exception: Unable to resolve var: g in this context

17:10 chouser: piccolino: you're sure the NPE is from the recur?

17:10 ordnungswidrig1: ,(binding [g 1] ((fn [] g)))

17:10 clojurebot: java.lang.Exception: Unable to resolve var: g in this context

17:10 ordnungswidrig1: ups

17:10 sorry.

17:10 piccolino: Well, the actual stack trace has clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:263) at the top, and the next thing down the stack is blah$wrap_result__11091.invoke.

17:11 And I have done println debugging to where if I change it to (do (println "Test") (recur ...)) that Test prints.

17:11 So I think that is something from the recur. Though like I said, if I execute either clause separately right before, they work fine.

17:12 chouser: I bet it's coming after the recur. if remaining-kvs is empty, (.getFamily kv) will throw

17:13 piccolino: Ahhhhh.

17:13 Yeah, you're right.

17:13 I need to do that if (nil? kv) test sooner.

17:14 ordnungswidrig: piccolino: that's nice spot for an if-let

17:14 piccolino: I'd never even heard of if-let. Lemme look that up.

17:16 ordnungswidrig: are var bindings thread local?

17:16 chouser: yes

17:18 ordnungswidrig: hmm, so how can I solve the following problem: given a lib with a local var *config* and a with-config macro which expands to a binding [*config* …]. The lib is called from a jetty thread and does not receive it's binding.

17:18 technomancy: ordnungswidrig: take a look at bound-fn

17:19 piccolino: Wow, I cannot even figure out how to use if-let.

17:20 ordnungswidrig: piccolino: (if-let [kv (first remaining-kvs] (recur …) (kv-map))

17:21 piccolino: OK, so the test is also the assigned value?

17:21 ordnungswidrig: piccolino: (if-let [x foo] (bar x) (baz x)) is (let [x foo] (if x (bar x) (baz x))

17:21 piccolino: yes

17:21 piccolino: OK, thanks.

17:25 Wonderful, it's all working. Thanks guys.

17:25 ordnungswidrig: bound-fn to the rescue!

17:25 thanks

17:25 me - sleep - now.

17:26 bosie: anybody knows why, all of a sudden, i get this: http://gist.github.com/304306

17:28 ikitat: clojure-contrib is not in your classpath?

17:28 AWizzArd: bosie: (System/getProperty "java.class.path")

17:29 bosie: AWizzArd: results in the right path

17:29 Raynes: bosie: It's been renamed.

17:29 c.c.seq I believe.

17:29 http://groups.google.com/group/clojure-dev/browse_thread/thread/49068754a8c2efb9#

17:29 piccolino: Hm, transients are apparently not collections. I was not expecting that.

17:31 AWizzArd: Raynes: good info, thx

17:31 Raynes: I got bit in the ass by the rename a few days ago.

17:32 technomancy: transients are collections

17:33 they're just not persistent

17:33 piccolino: coll? returns false.

17:34 bosie: ikitat: crap, i don't know why but it wasn't there

17:34 technomancy: right; coll? also checks for persistence

17:34 (doc coll?)

17:34 clojurebot: "([x]); Returns true if x implements IPersistentCollection"

17:34 piccolino: Ah.

17:34 Is there some way to ask "Can I run map on this?"

17:34 technomancy: it's a bit unexpected though if you don't read the docstring

17:35 piccolino: probably sequential?

17:35 maybe not; it doesn't return true for arrays

17:36 piccolino: Well, I guess you can't run map on transients anyhow.

17:36 technomancy: it also doesn't work for strings, which you can map

19:02 fanatico: I'm writing a macro to turn (named-map :x :y :z) => (zipmap [:x :y :z] [x y z]). Right now I have http://gist.github.com/304345. This works for vars, but eval doesn't see local bindings. Any way to get around this?

20:00 underdev: oic, you press 0 at the exception and slime-repl clojure restores the previous buffer

20:00 vn

20:09 icey: noob question - i grabbed a jar from clojars (jbcrypt); and lein pulled it down with no problems. but i can't seem to (use) it the same way i do every other jar.

20:10 is there a way to determine the name i should be using instead of the .jar name?

20:10 (i get Could not locate jbcrypt__init.class or jbcrypt.clj on classpath: )

20:11 ikitat: icey: jbcrypt is a java lib or clojure lib?

20:12 icey: ikitat it's a java lib

20:12 ikitat: so you don't want to 'use' it you want to 'import' it

20:12 icey: ahhhh

21:16 piccolino: Just wondering: Is there something about how transients work that means it doesn't make sense to define something like ISeq for them?

21:17 hiredman: yes

21:17 transients are almost the antithesis of sequences

21:18 sequences are generally lazy, transients are not, sequences are immutable, transients are not, etc

21:36 piccolino: Oh I know, but it just seems like it's very limiting to not be able to step through the contents of one. I didn't mean ISeq itself, maybe something like ITransientSeq, just so you could call map and stuff on them.

21:41 hiredman: piccolino: uses reduce

21:42 er

21:42 *shrug*

21:44 piccolino: Yeah, I tried that too

21:44 Ah well

22:29 jlilly: hey folks. is there something like elisp's prog block which allows me to execute multiple things for a statement.

22:29 qbg: do

22:29 jlilly: ie: (if (mycond) (XXXX (statement 1) (statement 2)) (else block)

22:29 so XXXX = do?

22:29 qbg: ,(doc do)

22:29 clojurebot: Excuse me?

22:29 ikitat: do is a special form no?

22:29 but do would do it :)

22:30 it'd be cool if (doc special-form) would work

22:31 hiredman: it does at the repl where it is special cased by doc

22:31 jlilly: also.. are there style guidelines for clojure code?

22:31 hiredman: actually at the repl it just gives you a url

22:31 ikitat: hiredman: really, I could have swore that didn't work

22:33 jlilly, maybe this https://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards

23:05 technomancy: jlilly: there's a good one that's more general (scheme/CL-focused) at http://mumble.net/~campbell/scheme/style.txt

23:06 still lots of good notions in there

23:20 jasapp: http://paste.lisp.org/display/94966

23:20 what would be the best way to do that?

23:21 late I've gotten the impression that anaphora is bad, but I'm used to using it from cl

23:22 lately

23:23 dakrone: what's the right way to cast nil to a different object type in Clojure?

23:23 jasapp: what different object type do you have in mind?

23:24 dakrone: implementing this java line: tagger = new PosTagger(model,(Dictionary)null);

23:25 if I do nil without casting, can't find matching ctor

23:25 arbscht: jasapp: anaphora in CL is probably bad style too. in either case, it might be better to let the caller provide a symbol for binding

23:26 (foo [y] (inc y))

23:26 jasapp: ahh, ok

23:26 bad style in CL?

23:27 arbscht: jasapp: yes, it is just as confusing in any lisp, imo

23:27 jasapp: that one guy from allegro used it everywhere

23:27 slyphon: multimethods...wow

23:28 jasapp: aif if I remember correctly

23:28 arbscht: I think I'm starting to agree with you though

23:28 arbscht: well, there is no consensus on good CL style ;) in CL it is common to see things like (with-output-to-string (s) (foo s))

23:31 qbg: darkrone: Applying a type hint to nil might work

23:31 yuuki: Is there a way to create cyclical objects in clojure?

23:32 for intance, a list that contains itself?

23:32 jasapp: yuuki: I remember hearing no, but that was quite some time ago

23:32 qbg: yuuki: Why do you want that?

23:33 yuuki: I'm implementing a language that can be recursive, so I want to have a piece of code point to its enclosing block

23:33 qbg: Anyways, a reference type should be able to store a reference to itself

23:35 So you want the function to exist in its environment?

23:36 yuuki: hmm, I think I'm going about it in the wrong way

23:40 dakrone: qbg: I don't remember how to apply it to nil, [#^Dictionary nil] gives me errors

23:40 qbg: Try something like (let [foo nil] ... #^Dictionary foo ...)

23:42 Hmm, alternatively, try quoting nil

23:48 tomoj: why would you want a reference type to refer to itself? that sounds awesome

23:49 I get a stack overflow error trying to make an atom refer to itself :(

23:49 qbg: Are you printing it?

23:50 ,(let [foo (atom nil)] (reset! foo foo) nil)

23:50 clojurebot: nil

23:50 tomoj: ah, yeah, I guess I tried to print it

23:51 is there any reason to do that, though?

23:51 seems cool, but I can't imagine a use

23:53 qbg: Well, how about an atom that holds a vector that also contains the atom?

23:55 That way you could hold on to old state, but have the current state available and settable.

Logging service provided by n01se.net