#clojure logs

2009-04-18

00:01danlarkingenerationkill: yes
00:02generationkillIn one of the examples on clojure.org; clojure.xml/parse is applied to "build.xml" from the clojure directory...
00:02generationkillthe returned value contains things like {... :contents nil}
00:02generationkillwhich is not the same as {...}
00:20durka42can you call jython from clojure?
00:23cp2probably
00:24cp2i dont see why not
00:24cp2its just another library
00:35generationkill,(find-doc "enumeration")
00:35clojurebot------------------------- clojure.core/enumeration-seq ([e]) Returns a seq on a java.lang.Enumeration
00:36generationkillSo enclojure is the best IDE these days?
00:40durka42vim :p
00:42generationkillHow do you search and access the vast Java library documentation? (I'm a Java/JVM noob)
00:53durka42generationkill: google :)
00:53durka42also clojurebot has some shortcuts
00:53durka42~javadoc java.util.concurrent
00:53durka42fail
00:53durka42well... you get the idea
00:55generationkillfact: each google search wastes 1 kJ of energy, on average. Save the trees, etc.!
00:55durka42i remember that article
00:55durka42it was a very dubious fact
00:56slashus2riight
00:58generationkillI wonder if each search distributes its workload among many nodes
00:58generationkillso even if your search took 0.2 seconds, maybe hundreds of nodes were involved
00:59cp2~paste
00:59clojurebotlisppaste8, url
00:59lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
01:00generationkillIt's not dubious, google says so: http://googleblog.blogspot.com/2009/01/powering-google-search.html
01:02lisppaste8cp2 pasted "*what*" at http://paste.lisp.org/display/78777
01:04cp2hrm
01:04cp2now that i look at that stack trace again it looks like something to do with BCEL
01:04cp2but evidently caused by my code...somewhere
01:09cp2 Constant THAT = (Constant) o2;
01:09cp2this is the problematic code in BCEL
01:09cp2so now i need to find out what is causing a Constant's equality to be compared with just a vanilla Object instance
01:46danlarkinso...srsly? you still can't set the java user agent
01:47cp2afaik you can with URLConnection
01:48danlarkinnot anywhere I can find
01:50danlarkinoh, perhaps just by setting the User-Agent header... I'll try that
01:50cp2yes, thats what i mean
01:53danlarkincp2: thanks, success. This is a sign I need to go to bed
01:53cp2:)
01:53danlarkinwhen I miss things like that :)
01:53cp2sleep is for the week
01:53cp21:53AM, i am not flinching
01:53cp2wow
01:53cp2weak*
01:53cp2haha
02:08durka42i would say sleep is more for the weekend
02:22jliI tried to use Common Lisp to play with the Netflix dataset. I wanted to make a hash table for each user, keys being movies they've seen and values being their ratings for them
02:24jliso that's ~480,000 hash tables. in the middle of filling them by reading the data (~100,000,000 ratings), both SBCL and clisp crashed. clisp gave an out-of-memory error and seg faulted and sbcl gave a "heap exhausted" error.
02:25jlimy friend using Python had no problem building 480,000 hash tables and sticking all the ratings across them, so I was disappointed. any guesses as to how well clojure would handle it?
02:29cp2quite well if you go lazy
02:34jlihm, that's an interesting idea..
07:05noidikotarak, i'm having some trouble installing vimclojure (thanks for writing it, seems very cool already judging by the screenshots and docs!)
07:05kotaraknoidi: hi, what kind of trouble?
07:05noidikotarak, in ftplugin/clojure.vim, the line if exists("b:vimclojure_namespace")
07:05noidievaluates to false
07:06noidiso i don't get the keybindings or omnifunc
07:06noidido you know what might be wrong?
07:06kotarakyes, maybe it does evaluate to false. Did you start the ng-server?
07:07noidiyes
07:07noidijava com.martiansoftware.nailgun.NGServer 127.0.0.1
07:07noidiNGServer started on 127.0.0.1, port 2113.
07:07kotarakOk.
07:07noidi/home/noid/code/clojure/clojure.jar:/home/noid/code/clojure-contrib/clojure-contrib.jar:/home/noid/code/vimclojure/vimclojure.jar:
07:07noidithat's my $CLASSPATH
07:07kotarakDid you set add the line "let clj_want_gorilla = 1" to your .vimrc?
07:07kotarak-set
07:08noidilet g:clj_want_gorilla = 1
07:08kotarakok.
07:08kotarakDid you configure the location of your nailgun-client?
07:08noidilet vimclojure#NailgunClient = "/home/noid/code/vimclojure/ng"
07:09kotarakOk.
07:09noidii'm running vim 7.2 on 32bit ubuntu jaunty beta
07:09kotarakWhat does the following command say when you do it manually in some shell: /home/noid/code/vimclojure/ng de.kotka.vimclojure.nails.NamespaceOfFile < some-clojure-file-here.clj
07:10noidiand i removed my old ~/.vim* files (temporarily of course:) to make sure that i don't have any settings or plugins that might break vimclojure
07:11noidijava.lang.ClassNotFoundException: de.kotka.vimclojure.nails.NamespaceOfFile
07:11noidithat's odd...
07:11kotarakHmmm... Can you try to remove the trailing : from the classpath?
07:13noidididn't help
07:13kotarakhmmm....
07:13kotarakOdd...
07:13noidibut this works: /home/noid/code/vimclojure/ng clojure.lang.Repl
07:14kotarakcan you try: /home/noid/code/vimclojure/ng de.kotka.vimclojure.nails.Repl -r
07:14kotarakThen just type something like (prn :xxx) and a Control-D
07:15noidithat also gives me the ClassNotFoundException
07:15kotarakOk. Something is wrong with the vimclojure.jar.
07:16noidiI also tried starting the serve with: java -cp vimclojure.jar com.martiansoftware.nailgun.NGServer 127.0.0.1
07:16noidibut it didn't help
07:16kotarakCan you check that there a bunch of class files when you do a "jar tf vimclojure.jar"?
07:18noidiyes
07:18kotarakhmmmm....
07:18noidii removed the vimclojure.jar file and did a rebuild
07:19kotarakDid it help?
07:19noidiapparently the jar i had was something left from and older installation attempt, because now it stayed under "build"
07:19kotarakyes. That's due to changes in the build system.
07:19noidijava -cp build/vimclojure.jar com.martiansoftware.nailgun.NGServer 127.0.0.1
07:20noidi./ng de.kotka.vimclojure.nail.Repl -r
07:20noidijava.lang.ClassNotFoundException: de.kotka.vimclojure.nail.Repl
07:20kotaraknails <- missing s
07:21Chousukenailgun is nice for the clj script
07:21noidijava.lang.NoClassDefFoundError: clojure/lang/IFn
07:21Chousukenow I get an instant repl when I type clj instead of having to wait :P
07:21noidithis is progress, i guess :)
07:21kotarakOk. That's good! now the clojure.jar is missing.
07:22kotarakSetup your initial classpath with the correct vimclojure.jar and you should be fine. :)
07:22noidithanks a lot, kotarak!
07:22kotarakChousuke: yes. Nailgun is nice. I will also look into clj-server.
07:22kotaraknoidi: np :)
07:23noidimaybe vimclojure could print an error message if the connection fails?
07:26noidiand it could also bind the keys it uses even if the connection fails
07:26noidiit's pretty strange to try to open the repl with \sr and end up in the insert mode with the letter under cursor replaced with r :)
07:27noidi(but now it works for me, thanks again!:)
07:27kotaraknoidi: yes will work on robustness
07:29noidii wish i knew vimscript so i could give a hand
07:30noidibut learning one new programming language (clojure) is enough work :)
08:04noidikotarak, why are 'o' and 'O' commands slow when using vimclojure?
08:06leafwnoidi, kotarak : I wonder about that too. I think it has to do with syntax evaluation, to compute the number of white space.
08:08noidithe weird thing is that I<cr> and A<cr> are not slow at all
08:09noidiand I think they should be equivalent in functionality
08:09noidiI think I'll just nmap o and O to those sequences for now :P
08:34kotaraknoidi, leafw: I don't actually. On #vim no one could answer. I'll ask on vim-dev. The functions used for o/O are the same as for "normal" <CR>....
08:34kotarakI don't know...
08:36noidii must say, i'm *very* impressed with vimclojure
08:36kotaraknoidi: thanks :D
08:37noidii've always thought that these kind of features are for emacs users and their arthritic pinkies, not us vimmers :)
08:37kotaraknoidi, you will get used to it ;)
08:37kotarakOk. Another try on #vim...
10:28duck1123hey guys. Has anyone built any sort of "jump-to-test" command for emacs yet?
10:28duck1123I want something where I can be editing clojure code, and hit a key combo to place poinn in the test for that function
12:08StartsWithKhi, i am getting a strange error after i created a class with gen-class, at runtime i get the message:
12:09StartsWithKjava.lang.ClassFormatError: Duplicate method name&signature in class file net/ksojat/truba/ClojureCompile
12:09StartsWithKwhat is that?
12:09kotarakMaybe you declared a method, which exists already in a super-class? (just guessing)
12:09StartsWithKi don't have any duplicate names
12:09StartsWithKhmm
12:09StartsWithKTask has init method
12:09StartsWithKbut i set :init to init-task
12:11StartsWithKis it maybe that i dont declare execute in gen-class that it can throw BuildException
12:11StartsWithKhow can i even declare that
12:11kotarakYou can't, I think.
12:12StartsWithKups, Task dosn't even have init(), so it can't be that
12:17StartsWithKis there some kind of a tool that will dump me a .class file in readable form?
12:40danlarkinStartsWithK: like a disassembler?
12:49StartsWithKdanlarkin: yes
12:50naf3tscomes with the jdk
12:51naf3tsjavap - Java class file disassembler
12:54StartsWithKnaf3ts: thanks
12:54StartsWithKit dosn't show any duplicate method names.. strange
15:19Lau_of_DKGood evening gents
15:20Lau_of_DKIm facing a rather troublesome issue. When serving up a servlet using Jetty, the connection type is automatically set to "keep-alive". This keeps the connection open for about 8 - 9 seconds, longer after the page has been displayed. How do I set the connection type to "close", so that I can rapidly close it ?
15:24eevarAdd a header, "connection: close", or something along those lines. read the http rfc for more details. You really shouldn't worry about it, tho. you'll lose more performance than you'll gain if your site has images, javascripts and similar..
15:25danlarkinHowever if you have another server (not your app server) serving the content from disk, you should indeed have Connection: close
15:25Lau_of_DKI really should worry, the applet is passed through proxies, all waiting for the close signal before passing the signal on, giving me load times that are enourmous
15:26eevari think you're misdiagnosing your issues
15:26danlarkinyour app server should probably not be using keep-alive, but any proxies upstream probably should
15:26eevarproxies don't have to wait for connection close to relay the data
15:27Lau_of_DKMaybe the dont have to, but my clients proxy seem to be doing this - but you could be right of course, I could be misdiagnosing
15:28Lau_of_DKfrom the rfc "A proxy server MUST NOT establish a HTTP/1.1 persistent connection with an HTTP/1.0 client (but see RFC 2068 [33] for information and discussion of the problems with the Keep-Alive header implemented by many HTTP/1.0 clients). "
16:30quidnuncIs there something like "->" that will pass each output item individually (i.e. to be "map"ped) to subsequent forms instead of a list of the outputs?
16:49durka42quidnunc might want a monad :)
16:49durka42http://intensivesystems.net/tutorials/monads_101.html
16:52dreishYeah, that does sound eerily like the monad tutorial's first example.
17:30quidnuncdurka42, dreish: I don't see what facilities monads provide for making this easier. Can you spell it out for me? The first example in the tutorial doesn't seem to do what I want and it isn't obvious to me how to adapt it.
17:35dreishIt looks like what you're asking for is the sequence monad (sequence-m), but personally I don't know that I'd use it. I'd probably just do something with mapcat. I'm not sure exactly what you're trying to do, though.
17:36quidnuncdreish: The function composition example for the sequence monad wouldn't work because the output of the first function is a list. It is the same for ->.
17:36dreishThat first sentence doesn't seem to logically follow from anything.
17:37dreishBased on my limited understanding of it, I think sequence-m wants functions that return lists.
17:37dreish(Or other sequences.)
17:37quidnuncdreish: ("->" foo bar) takes the output of foo and passes it to bar as one argument. I want a map over bar
17:38quidnuncor rather to map bar over the list returned by foo
17:38dreishRight, so (domonad sequence-m [a (foo), b (bar a)] b), right?
17:39dreishThough I'd just do (map bar (foo))
17:39quidnuncdreish: It's more like ("->" foo bar baz blah batetc)
17:39quidnuncdreish: It's more like ("->" foo bar baz blah bat etc)
17:40dreishYou could write a map-> macro, or use the sequence monad. Or write out all the maps.
17:40dreishActually, map-> is just a function, not a macro.
17:41quidnuncdreish: In the monad version you gave are you sure bar doesn't bind "a" as a list?
17:42dreishNo, I've never used it.
17:42dreishI'm just reading the tutorial.
17:42quidnuncokay
17:42dreishAs I said, I'd probably prefer to do this as a function.
17:46dreish~paste
17:46dreishYikes, no bot.
17:46dreish(defn map-> [s [f & more]] (if more (recur (map f s) more) (map f s)))
17:47dreish user=> (map-> [1 2 3] [#(+ % 1) #(* % 2)])
17:47dreish(4 6 8)
17:47dreishSmiley not intended.
17:48kotarak,(map (comp #(+ % 1) #(+ % 2)) [1 2 3])
17:49dreish(4 5 6)
17:49kotarak<dreish> Yikes, no bot.
17:49kotarakhehe ;)
17:52quidnuncThanks dreish. Is it necessary that the second argument be a list?
17:52dreishFor the way I wrote map->.
17:53dreishOr you could use map comp, like kotarak.
17:53kotarakquidnunc: you can try (defn map-> [s & [f & more]] ...) and then (map-> s f1 f2 f3)
17:53dreishkotarak: The recur won't work, then.
17:53kotarakAh. geez....
17:53dreishThat was why I did it that way.
19:36rabidsnailHow do I take make a new vector out of the elements of a bunch of other vectors? like [1] [2 3] [4] -> [1 2 3 4]
19:36hiredman(apply vector ...)
19:36hiredmanor vec
19:36hiredmanI never remember which one does what
19:38hiredman(into [] (concat [1 2] [3 4])); also works
19:39rabidsnailCool, thanks!
19:43stuhood~def subvec
19:44stuhoodoh no! clojurebot... wru
19:44hiredmanmachine is down, for unknown reasons :(
19:44stuhoodouch
19:44hiredmanYeah
19:48lisppaste8quidnunc pasted "map->" at http://paste.lisp.org/display/78810
19:48quidnuncHow come this recur seems to loop forever? ^
19:49hiredmanrecur with & is troublesome
19:49hiredmanmore ends up being (nil)
19:49hiredmannot nil
19:49hiredmanor ()
19:49quidnuncI see.
19:49hiredmanand it sticks at (nil)
19:49quidnuncWhat is the idiomatic work around?
19:50hiredmanwhat is the purpose of map->?
19:51quidnunchiredman: Like "->" but instead of the output list of the first form being passed to the second form, the second form is "map"-ped over the output list.
19:52quidnunc<dreish> user=> (map-> [1 2 3] [#(+ % 1) #(* % 2)])
19:52quidnunc<dreish> (4 6 8)
19:52quidnunc
19:53quidnunchiredman: Except I don't want to pass the forms as a list ((map-> foo bar baz) not (map-> foo [bar baz]))
19:53hiredmanuh
19:53dreishquidnunc: Why?
19:53dreishWhat's driving all this?
19:54hiredmanif you are passing it that way then you don't need & anyway
19:54quidnuncdreish: Besides not looking right to me it is not consistent with ->
19:54hiredmanI would just compose all the mapping operations and use map
19:54quidnuncAlso, why should the first form be different then the others
19:55hiredman(map (comp bar baz) foo)
19:55hiredmansomething like that
19:55quidnuncdreish: What I am doing is trying to thread a bunch of xml-> statements
19:55hiredman(map (comp baz quantz) (bar foo))
19:56hiredmanif you have a pipeline you use over and over
19:56hiredman(def op1 (partial map (comp baz quantz)))
19:57hiredman(-> foo bar op1)
19:57hiredman(-> foo- bar- op1)
19:57quidnuncNo it is not the same pipeline.
19:57hiredman(- standing in for ' to mark foo prime)
19:58quidnuncBasically, I'm using xml-> to find a element in a DOM tree, then I want to continue searching from that element.
19:58quidnuncSo I want to do (-> (xml1-> blah blah) (xml1-> blah blah)) but using xml-> (multiple results)
19:59quidnunc(those blah's are not the same :)
19:59hiredmansounds like you want reduce
19:59quidnuncI don't think so.
20:00quidnuncExample: Find all "span" tags that have "table" as a parent.
20:01quidnuncSo I'm thinking of something like (map-> (xml-> :table) (xml-> :span))
20:01hiredman(reduce #(%2 %) blah [#(xml1-> % blah) (partial map some-xml1->fun)])
20:02quidnunc(some details omitted)
20:02mattreplquidnunc: something like this: http://clojure.org/libraries#toc14
20:03quidnuncmattrepl: I'm using xml zip filter. I'm talking about those functions. But there seems to be no easy way to describe certain patterns (e.g. from above all span tags with table parents)
20:03quidnuncs/easy/concise
20:06hiredman"multi-stage filter" filter sounds exactly like what you want
20:07quidnunchiredman: Does reduce return more than 1 element?
20:07mattreplhaven't used that library before, but zip-filter/xml-> doesn't do what you want?
20:07hiredmanquidnunc, of course not, nothing can return more then one thing
20:08hiredmanthe one thing can be some sort of collection
20:08mattrepl(nm, just read more of the channel log)
20:12quidnuncmattrepl: No. At least not as far as I can tell. The trouble is describing that you want to search descendants of a node that you found through some other search. I may be able to describe properties of anscestors but that would appear to trigger a search down the tree and then back up which seems ugly and inefficient (contrast with search down the tree until you find the node you want and then continuing the search from there).
20:13quidnunchiredman: I don't want to use xml1-> I want to use xml->. Can reduce help me there?
20:15quidnunchiredman: Uh, never mind I missed the map in your snippet
20:17quidnuncBut it won't scale to an arbitrary number of selectors.
20:17hiredmanwhy not?
20:18hiredman(reduce #(%2 %) blah [#(xml1-> % blah) (partial map some-xml1->fun) (partial map some-other-fun)])
20:18quidnuncSorry, what I said was misleading: I will be repeating a lot of "partial map"s
20:19hiredmanso?
20:19quidnuncOkay. I just thought (map-> (xml-> ) (xml->) (xml->)) was pretty clean.
20:20hiredman (map-> (xml-> ) #(xml->) #(xml->))
20:20hiredmanactually
20:20hiredmanwith % and # everywhere
20:20quidnuncYes
20:20hiredmanif anything partial is cleaner
20:20hiredman(imo)
20:20quidnuncFair enough
20:20quidnuncThanks
20:38cp2is there already a function to check if coll A contains all of the items in coll B
20:39cp2i can do a sort of hackish thing with set/difference and set/intersection and empty?
20:39cp2but it throws an exception in some cases
20:40hiredmanyou could do some kind of map and reduce
20:40danlarkinset difference is what you want, though
20:40cp2danlarkin: thats what i tried
20:41cp2beware:
20:41cp2clojure.set=> (intersection [1 1 2 3 4] [1 4 7])
20:41cp2#<CompilerException java.lang.ClassCastException: clojure.lang.LazilyPersistentVector cannot be cast to clojure.lang.IPersistentSet (NO_SOURCE_FILE:0)>
20:41cp2clojure.set=> (intersection [1 1 2 3 4] [1 4])
20:41hiredman(reduce #(and % %2) (map #(.contains B %) A))
20:41cp2[1 4]
20:41cp2i dont want that to happen though
20:41cp2ill try that hiredman
20:42cp2works fine, thank you
22:35emacsenDumb question, but inside a macro, if I'm looking for a new list sexp, just use list?
22:36Chousersure
22:36Chouseror `(foo bar)
22:36emacsenhuh?
22:36emacsenNo I mean if I'm looking for sexps inside my form
22:36emacsencan I just use list? ?
22:37Chouseroh. (list? foo) yeah, that's fine
22:37emacsenI wasn't sure if there was a more proper way
22:38emacsenI'm showing an example macro of a postfix version of lisp, recursively reversing the form
22:38emacsenit's dumb as sin, but it's just an example for someone
22:39Chouseryou could use 'sequential?' if you want to allow vectors too
22:39emacsenbut no clj forms are vectors
22:39emacsenyou don't say [print foo]
22:40Chousertrue
22:40emacsenand I will assume a vector is in the correct order
22:40Chouserok
22:40Cark(defun blah [arg1 arg2] ...
22:40Carkdefn even
22:41Carki wonder how a postfix let form would look =)
22:41emacsen(foo print)
22:42emacsenbut it's dumb because you have to put the parens at the beginning :)
22:43Carkpostfix doesn't need parenthesis
22:43Carkat least once the arity of functions is known
22:44emacsentrue. well want to write this thing with me? :)
22:44Carkhell no =P
22:44Carki'm late a project
22:44Carkand got another one coming on monday ...
22:44emacsenin clj??
22:45Carkyes =P
22:45emacsenwow!
22:46Carknothing fancy
22:46Carkit's a licence server for an existing application i'm doing now
22:46emacsenflexlm too good for you?
22:47Carki don't know about it
22:47Carkcustomer wants custom application, that's what he gets
22:52Carkhum your thing is for corporate usage
22:52hiredmanfunction's don't have easily accessible arity information
22:54emacsenhiredman, yeah I thought I was just dumb for not seeing it
22:55hiredmanit makes me sad
22:55Carkah sorry if i misled you
22:56Carkit was just a random thought
23:01emacsenokay, I'm a total n00b, but can someone show me a (loop ..) form that lets me go through items in a seq?
23:01emacsenI'm not getting how to do the binding for the current item
23:01Chouserif you're walking through a seq, you probably don't want loop/recur
23:02Carkwhat do you want to do ?
23:02Carkthere are quite a few ways to loop over a sequence
23:02Chousermaybe map, for, reduce, or some such
23:02hiredmanif you are reversing all lists, map is most likely what you want
23:02hiredmana recursive map
23:03emacsenI want to go through a list and reverse it, recursively
23:04emacsenoh
23:04emacsenhrm...
23:06Cark~paste.
23:06Cark~paste?
23:06Carkhum
23:06hiredmanlisppaste8, url?
23:06lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
23:06emacsenI'm not entirely sure how to do that recursively?
23:07lisppaste8cark pasted "untitled" at http://paste.lisp.org/display/78818
23:07hiredmanyou make a function that falls itsself on lists
23:07hiredmanand map it over your top level expression
23:07hiredmancalls
23:08emacsenlemme try that
23:09Carkthough i wonder why you need to reverse
23:09Carkthat would usually mean you did something wrong
23:09emacsenCark?
23:10emacsenOh... That's easier to explain
23:10hiredmanCark, he is writting s-exprs ltr instead of rtl
23:10emacsenI'm on a clj list and the guy is saying for a particular application he prefers postfix notation
23:10emacsenand he wrote a solution, but it's not lispish
23:10Carkah right sorry forgot about that
23:11emacsenso I'm showing him that (even if it's a bad idea) he could use macros for that
23:11hiredmanusing -> is sort of postfix-ish
23:11Chouser((fn r [c] (cond (list? c) (map r (reverse c)) (coll? c) (into (empty c) (map r c)) :else c)) '(1 2 [3 4 (5 6 7) 8] 9))
23:11emacsenrather than the way he did it, which was (in essence) to build a very dumb reader
23:12Carkhuuu nice chouser
23:12emacsenchouser is hard core
23:12Cark,(doc empty)
23:12cp2no clojurebot
23:12hiredmanclojurebot is down
23:12emacsenyeah I've not seen empty before
23:12Chouserdoesn't work with maps, dangit
23:13Carkdoesn't empty work with lists ?
23:13Chouseryes, but we want to reverse lists, right?
23:13emacsenoh, also I don't care about coll?. I only care about list? but that's minor
23:14Chouserbut you want to recurse into other colls, don't you?
23:14emacsenno
23:14emacsenbecause other colls aren't lisp code
23:14emacsenthis will live in a macro
23:14Cark (into (empty '(1 2 3)) '(5 6 7))
23:14Cark(7 6 5)
23:14Chousersure they are
23:14emacsenyou don't make function calls with seqs other than list AFAIK
23:14Carkah that would be a double reverse
23:14hiredmanemacsen, lists can be inside other colls
23:15emacsenoh, good point
23:15hiredmanlike [(+ 1 2)] results in [3]
23:15Carki think you need a code walker anyways
23:15Carkbecause of literal data
23:16hiredmanmaybe you should use zippers and write a coll-zip
23:17Carkthis problem isn't as trivial as it seems
23:17hiredmanhmm
23:17emacsenyeah
23:17hiredmancoll-zip would be really hard
23:17emacsenand I'm gonna tell the guy that
23:18hiredmanthere is always ->