#clojure logs

2009-07-18

00:27JomyootAnyone using Cocoa Emacs 23?
00:28slaneynot I
00:28slaneyI am using emacs 23
00:29slaneybut not on OSX
00:30Jomyoot(set-default-font "-apple-Akkurat-Mono-medium--14-*-*-*-*-*-*-*") is not doing a thing for me :(
00:31Jomyootno error either
00:31rottcoddksclarke: don't use the svn repo, clojure has moved to git http://groups.google.com/group/clojure/msg/ca4fb58428052554
00:31ksclarkeah thanks
00:34duck1123Rich really needs to empty out the old repositories
00:58Chouserhmph. log's still not up. hopefully tomorrow...
01:43duncanmla la la
01:49Lau_of_DKTop of the morning gents
03:46Jomyoothow would I collect result of dotimes into a list
03:46Jomyootseq
03:46carkyou wouldn't
03:47carkdotimes is for side effects
03:47Jomyootwhat would be the way then?
03:48JomyootI want to iterate over ArrayList
03:48Jomyootand collect results into a seq
03:48cark(seq my-array-list) ?
03:48carkor map over it
03:48carkor reduce over it
03:50Jomyootdo I have to dorun also if over the map as well if I want nonlazy?
03:51carkmhh i'm not quite sure ...let's give it a try
03:51cark,(type (seq (doto (new java.util.ArrayList) (.add :a))))
03:51clojurebotclojure.lang.IteratorSeq
03:52carkI think the sequence is not concrete until you do the dorun
03:52carkor doall actually
03:52carkthat is : the values could be changed
03:52carkin the array list
03:53carki'm not making sense, i need coffee =)
05:06mariorzhow can i get a character unicode code?
05:06mariorzcharacter's
05:07mariorzlike an inverse char
05:11mariorzsomething like python's ord
05:12hiredman,(set (map #(.getName %) (.getMethods Character)))
05:12clojurebot#{"compareTo" "codePointBefore" "isISOControl" "toChars" "getClass" "isDigit" "forDigit" "isUnicodeIdentifierStart" "isWhitespace" "isLowerCase" "isSurrogatePair" "isUpperCase" "isJavaIdentifierPart" "valueOf" "toCodePoint" "isMirrored" "reverseBytes" "notify" "isHighSurrogate" "toString" "codePointCount" "isJavaIdentifierStart" "digit" "toTitleCase" "isLowSurrogate" "isUnicodeIdentifierPart" "isLetter" "getType" "isValid
05:12hiredman,(Character/toCodePoint \b)
05:12clojurebotjava.lang.IllegalArgumentException: No matching method: toCodePoint
05:15mariorzhmm
05:16mariorzwhy method not found?
05:16mariorz,(. "a" toUpperCase)
05:16clojurebot"A"
05:17hiredmanmariorz: because the call to toCodePoint did not match any known toCodePoint method signature
05:17hiredmango forth, and read the javadoc for Character
05:17mariorzoks
05:17hiredmanand "a" is not a Character it is a String
05:17mariorznoted
06:40smee0815hi, anybody awake?
06:50smee0815I'm trying to learn some clojure (coming from a java background), and I'm stuck with a seemingly simple problem
06:51StartsWithKwhats the problem?
06:51smee0815I have a list resembling a logical expression like '(:a and :not :b)
06:52smee0815what I'd like is a list like '(:a :and (:not :b))
06:52smee0815i.e. every :not should be in it's own subexpression
06:52smee0815my solution suffers from a stackoverflow exception, though
06:52lisppaste8smee0815 pasted "Stackoverflow" at http://paste.lisp.org/display/83783
06:52smee0815:(
06:55smee0815bah, this function is also buggy :(
07:00ChousukeI don't get a stack overflow, but it does give the wrong result.
07:01smee0815the overflow occurs when running this function on a really large expression, in my case about 1,5MB when printed...
07:02Chousukewell, that's not a surprise then, since your function is recursive
07:02Chousukeand fairly quickly expanding, too
07:02smee0815yes, but this problem is recursive, what else could I use?
07:06rottcodd,(doc recur)
07:06clojurebot"/;nil; "
07:08rottcoddyou can use recur to get tail call optimization: http://clojure.org/special_forms#recur
07:08smee0815mmh, if I could get the recursion into a tail call position only, right? Or can I use recur, if it would occur several times within the same function?
07:09rottcoddonly on tail calls
07:13Chousukesmee0815: do you ever need to hold the entire thing in memory?
07:14Chousukeyou might be able to avoid the stack overflow by making it a lazy seq and not holding on to the head.
07:14lisppaste8smee0815 annotated #83783 "Fixed bug" at http://paste.lisp.org/display/83783#1
07:16smee0815well, yes, I will use the sequence for more transformations, like simplifying them
07:21StartsWithKlisppaste8: help
07:21lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
07:21lisppaste8StartsWithK pasted "For smee" at http://paste.lisp.org/display/83784
07:22StartsWithKthis will owerflow, but it shoud not so quickly
07:24smee0815StartsWithK: Thanks a lot, I'll try to get, what you did there :)
07:37smee0815StartWithK: this function doesn't seem to work in every case, for example: (normalize-nots '(:a :and ((:not :b :or :c) :and :d) :and :e))
07:39smee0815I meant: (normalize-nots '(:a :and ((:not :b :or :c) :and :d) :and :e))
07:39smee0815sry, should really use the pastebot :)
07:40lisppaste8smee0815 annotated #83784 "not yet complete" at http://paste.lisp.org/display/83784#1
07:43StartsWithKi see
07:44lisppaste8StartsWithK pasted "For smee #2" at http://paste.lisp.org/display/83785
07:46smee0815StartsWithK: Thanks a lot, that did the trick :)
08:27dysingerrhickey - what is gained by having mutable and immutable ? More efficient memory usage ?
08:27dysingerI thought the whole FP ideal was all about the immutable
08:28rhickeydysinger: imagine (foo x) -> y, and for any given x, it always produces the same y, and foo never has any other effects observable outside, is it a function/functional?
08:29rhickeythen imagine (foo some-huge-collection) -> another-huge-collection
08:30rhickeydo you care if inside foo it uses a mutable scratchpad that makes it must faster to build another-huge-collection?
08:31rhickeyfor instance, inside every assoc call there is some mutation (I create a new array and munge it)
08:32rhickeyone of the points of Clojure is that doing persistent data structures that way (with some mutation at birth) makes them much faster than trying to do them purely functionally (e.g. with some purely-functional array)
08:33rhickeythis just extends that story to application code, in a smooth way, since the source and destinations of these mutable collections are the persistent collections, and only by doing that can it be fast, copying into a Java collection and then back would be O(n)
08:35rhickeyIt is certainly an optimization thing, once nice thing about how it works is that the structure of your code is exactly the same - so do it the normal way, then only try the batch mode if you are facing a real perf bottleneck
08:36rhickeysome library code will use this by default, like 'into'
08:37rhickeymaybe that wasn't your question :)
08:38rhickeyIf it was just - where does the speed come from?, yes, much less allocation
08:46Chousukehmm
08:48Chousukeare you going to make mutable versions of other data structures too?
08:48rhickeyIt's much better to think of these as mutable modes of the persistent data structures
08:48rhickeybatch update modes
08:49Chousukeright.
08:49rhickeybut they don't cause anything to "become" mutable, no risk to a coll to call (mutable col)
08:49rhickeyshould be possible for any of the tree-structured colls, so maps but not lists
08:50ChousukeDoes it do copy-on-write or something if you try to modify a part of the mutable collection that is shared with an immutable collection?
08:51rhickeyor something
08:51dysingersorry
08:51dysingerI went to get coffee rhickey
08:51dysingercatching up
08:51rhickeydysinger: just kidding
08:52rhickeyI'm loathe to call it copy-on-write as that has O(n) implications not true here. But the mutable version does make 'isolated' copies of nodes as needed
08:52Chouseroh, somehow I missed (mutable coll)
08:53rhickey(mutable coll) is the key
08:53dysingerrhickey thanks for the explaination. It's exactly as I figured and makes sense.
08:54dysingeras long as you don't shoot yourself in the foot and start passing around (mutable xyz)
08:54rhickeydysinger: one nice thing is that the mutables don't support the functions of the immutables, and all of their fns have !s, so you'll see the leakage
08:55dysingernice
08:55rhickeyif accidental, if on purpose, I can't help, any more than if you used ArrayList
08:55dysingertrue dat
08:56Chouserso is each array inside a vector marked to indicate that an initial mutation of it requires a copy first?
08:56rhickeyChouser: which means it should be immutable!, per our conversation last night
08:56ChouserI suppose I could read the code...
08:56rhickeyChouser: a node, yes
08:56Chouserok
08:59rhickeythere's an indirection so all flags can be flipped in a single atomic op, and identity can be used to assoc with a particular editing stream, i.e. I might support clones of mutables
09:00rhickeyChouser: I was also fiddling with synchronizing them so our agent scenario would work, about 30% perf hit, just like j.u.Vector vs j.u.ArrayList
09:00rhickeynot sure I want to encourage MT use of mutables...
09:02rhickeythis perf hit not really a good benchmark, with warmup etc. They are working on making uncontested locks really cheap, and single-threaded use should be all uncontested, but it is still not nothing
09:07Chouserinteresting. and any cost to support "public" access to the mutable seems like a poor tradeoff, I would think.
09:08rhickeyChouser: depends on the perspective - they would still be several times faster than the immutable versions for bulk work, but drop a little further behind, e.g. ArrayList
09:10rhickeyheh, with synchronized they are exactly the same speed as j.u.Vectors
09:58ChouserI think my progress would be steadier if I didn't have a kid on my lap and two others trying to talk to me.
09:59duck1123I know how that is. (I have a 4 yr old and a 2 yr old)
10:03Chouserthat'll do it. :-)
10:13miTDRhi
10:13duck1123hello, miTDR
10:13miTDRare you a human or are you a robot?
10:14duck1123ah, a turing test then
10:14duck1123I am human
10:14miTDRthankyou for answering my question
10:42rhickeyimmutable now immutable! http://github.com/richhickey/clojure/commits/chunks
10:43rhickeysince it is actually a mutating operation on the mutable coll
10:43rhickeyis anyone trying this?
10:53miTDRyes
11:08Jomyoot_what is equivalence of map if you don't need return value?
11:09durka421what's the rationale for having mutable collections now?
11:09rhickeyJomyoot_: doseq
11:09Jomyoot_thanks
11:11rhickeydurka42: if you are writing a pure function of (f collx) -> colly, you can use them to speed up the implementation of f if it involves a lot of transformations of collx
11:13rhickeybasically so iff a bit of persistent coll code is a bottleneck, the solution isn't "switch to a different data structure"
11:15durka42okay
11:15Jomyoot_rhickey: are you the guy who made clojure?
11:15rhickeyJomyoot_: yes
11:15Jomyoot_wow
11:15Jomyoot_me and my wife are very excited
11:17Jomyoot_i am really amazed by what you have done.
11:18Jomyoot_i wish now there would be someting similar to RAILS for Clojure
11:23rhickeyJomyoot_: thanks - I think there are and will be more Clojure-like solutions than Rails - see Compojure and Enlive etc
11:25Jomyoot_i am hoping that cascade will be good
11:27Jomyoot_What is your favorite IDE?
11:27Jomyoot_Do you still use Aqua Macs?
11:46rhickeyLazilyPersistentVector is gone - http://github.com/richhickey/clojure/commits/chunks
11:46rhickeyat least instances of it are
11:52Chousercool
11:53Chouserthat one one to fix bugs in a class.
11:53ChouserI guess 1.0 should still get patched for the metadata thing
11:54Chouserok -- http://clojure-log.n01se.net/ is up to date. Will hopefully sync up every 20 minutes now.
12:18rhickeynaming question - what should the predicate be for collections that support this mutable mode?
12:26mattreplmutant?
12:26Chousukeheh
12:27danlarkinthere's always mutable?
12:27Chousukethat's not quite right, though.
12:28Chousuke"has-mutable-variant?"... a bit long, though :P
12:28rhickeyI've been using editable
12:29rhickeyinstance? clojure.lang.IEditableCollection
12:30rhickeyall the vector factory fns and 'into' now use this, should be much faster for large colls
12:44duncanmis there a reason why the clojure compiler doesn't automatically proxy a Fn to an interface if that iface has only one method?
12:45carkah that would be nice
12:46carkmaybe a macro could be devised to do this ?
12:46duncanmcark: there's already the proxy form if you want a macro
12:46rhickeyduncanm: proxy it when?
12:47carkduncanm : i mean as simple as a defn
12:47carkor fn really
12:47duncanmwhen compiling to bytecode?
12:48carkthe macro could even check the number of arguments, and maybe add type hints
12:52duncanmrhickey: i'm thinking that, instead of writing this:
12:52duncanm(.listFiles (java.io.File. "/tmp")
12:52duncanm (proxy [java.io.FilenameFilter] []
12:52duncanm (accept [file name] (.endsWith name "txt"))))
12:53duncanmbe able to write something like this:
12:53duncanm(.listFiles (java.io.File. "/tmp")
12:53duncanm (fn [file name] (.endsWith name "txt")))
12:53rhickeyduncanm: has been requested, a bit magical
12:54duncanmright
12:54carkwhy couldn't you write an ifn macro that does just that ?
12:54duncanmrhickey: and the natural extension of that is a map of keywords -> Fn, and have that be 'lifted' into an iface as well
12:54carkahh there it is
12:54rhickeycark: you need to have inferred the type of listFiles
12:55carkrhickey : can't you do it using reflection at macro expansion time?
12:55carkah right, you need to read the outside form
12:56rhickeycark: reflection on what, all you have are a bunch of forms?
12:56carkmaybe just add the interface type as a parameter
12:56rhickeyduncanm: a proxy is a map of symbols to fns pretty much
12:56duncanmrhickey: i took a brief look at this, one issue that jumped out was that the argument list is an immutable seq, so I can't do any trickery of updating the argument list when invoking the method
12:58rhickeyduncanm: args are passed individually
12:58duncanmoh wait, it's not an immutable thing, it's just an Object []
12:59duncanmrhickey: i thought it could be done during invokingMatchingMethod, but is that too late?
13:00rhickeyduncanm: I can't work on this right now, but I'm not necessarily in favor, very magical and difficult to explain when it wiil and won't work
13:01duncanmwell, that's why i'm asking
13:01duncanmif there's a chance of being accepted, i might look into cooking up a patch
13:02rhickeyduncanm: I think prior to clojure-in-clojure I'm not going to want to complicate the compiler for this
13:02duncanmif it's an iface with one method, then the Fn must be of the same arity, and it goes through
13:02duncanmthe multi method case is trickier, and perhaps the proxy form is sufficient already
13:03rhickeyseems like Groovy-envy :)
13:03duncanmrhickey: i saw that in JRuby, yeah ;-)
13:21RaynesVectors aren't seqs, right?
13:22rhickeyRaynes: no, but they are sequential
13:22rhickey,(sequential? [1 2 3])
13:22clojurebottrue
13:22RaynesWhen would you want to use a list over a seq?
13:22RaynesEr/
13:22RaynesSaid that wrong.
13:22RaynesWhen would you want to use a list over a vector. :p
13:23Raynesvector?, even.
13:23rhickeywhen generating code, when generating back-to-front
13:23rhickeynot too often in Clojure
13:25Raynesrhickey: Thanks.
15:08weissjhow do i split or tokenize a string?
15:09duncanmcall the split method?
15:10duncanmuser> (seq (.split "foo bar baz" " ")) => ("foo" "bar" "baz")
15:18Raynes,(seq (.split "foo bar baz" " "))
15:18clojurebot("foo" "bar" "baz")
15:30rlbIt looks like the clojure mailing list may be set to not send email to new subscribers by default. If so, is that intentional? I ask because supposedly sometimes this can be set that way accidentally.
15:41ChouserHehe. I think Tim Snyder broke 'binding'.
15:41kotarakChouser: I would never the idea to use binding like that....
15:45Chouseryeah. I think "correct" would be for the value printed for y to always be 1
15:46kotarakYes. Because jumping out of the binding with recur should "restore" the 0.
15:47Chouseryep.
15:47Chouser'recur' from inside a try/catch just isn't supported. I think you get compiler errors in some cases.
15:48rhickeyhttp://www.assembla.com/spaces/clojure/tickets/31
15:50kotarakHmmm.. What does Scheme do? (define (foo x) (fluid-let ((y (+ y 1))) (if (> x 0) (foo (- x 1))))) Geez. The parens.... in case I remember the syntax correctly, that is...
15:51kotarakrhickey: you did a really good job with [] and {}! :)
15:51rhickeykotarak: ?
15:52kotarak(defn foo [x] (binding [y (inc y)] ....) compared to the above....
15:52kotarak(let ((x (foo a))) .....)
15:52rlbThis might also be intentional, but an effect of having the default be "no mail" means that you have to have a google account to join the list. Without that, you wouldn't.
15:53kotarakI'm now used to Clojure's vector syntax. Much clearer, IMHO.
15:53rlb(to usefully join the list)
15:58rhickeyrlb: there's no setting for the group that determines the default mail option. AFAIK, everyone joining gets prompted as to what they prefer
16:00rhickeykotarak: I'm glad you like it. It's a hard argument to make in the abstract, esp to Lispers who've gotten used to so many parens, and so much overloading of parens, leading multi-parens etc, but your reaction is what was desired
16:00rlbrhickey: OK, supposedly I read that there's a default for new subscribers, and that's the one that will apply for those that subscribe via email, which is most relevant for anyone without a google account. However, I may well have misunderstood.
16:00rlbOf course, without a google account, AFAIK, there'd be no interface to change any settings.
16:00rhickeyrlb: I don't see it in my group settings options, if you know where it is - let me know
16:00rlbOK, thanks for looking -- I probably just misunderstood.
16:04rlbrhickey: ahh, here's what I'd found (just via some random searching) -- http://lowendmac.com/lists/iphone.html
16:04rlbSearch that page for "inadvertently set that way"
16:04rlbThough I have no idea if it's accurate, or if it applies to the clojure list.
16:07rlbAnyway, the only reason I brought this up is because I subscribed a while ago, but never got any mail. I checked my mail server logs, and there's been nothing, so I started poking around.
16:07rhickeyrlb: only if one adds members directly do you set their delivery option, there's no global default that I see for those joining themselves
16:09rlbOK, well perhaps the clojure list just requires that you have a google account. It'd be nice in principle if that weren't the case, but it's not the end of the world. Thanks again for looking.
16:11rlbrhickey: do you have any opinion about packaging clojure-contrib? Presumably it's not "stable", but I thought it might be appropriate for something like Debian unstable or experimental.
16:12rhickeyrlb: I don't have any opinion
16:13rlbOK, I might go ahead if I have time. Thanks.
16:14durka42it's already in macports
16:14durka42oh, not contrib
16:15rlbdurka42: right, but I work for Debian ;>
16:16durka42well, i was pointing out that clojure has been packaged
16:16durka42is there a debian package of clojure core?
16:16rlbdurka42: yes, recently added.
16:16skalnikclojure is so awesome!
16:16rlbdurka42: I think it's in unstable, and perhaps testing.
16:17rlbBTW, after I asked about adding some kind of #! support a while ago, I saw the "shebang" hack on the wiki -- nice.
16:18kotarak__maybe #! !# could be used for block comments instead of #| |# ...
16:18durka42that wouldn't help so much with shebang scripts, because you have to prevent the whole file being a block comment
16:19kotarak#!clojure-start-stuff\n!# ...
16:19rlbkotarak__: or in addition to, though perhaps the wiki hack is enough...
16:21kotarakAlso #! interpreters allow only one argument. scsh has a nice trick in giving a special argument which makes the second line be read with additional command line arguments to the interpreter. The third line then has the !#.
16:22rlbkotarak: guile's command line driver does that, and then supports a '\' "meta-switch" that tells it to treat the first part of the script specially. Apparently you have to do that to remain posix compliant since posix only allows one arg on the #! line.
16:23rlbSee "info guile" (or info guile-1.8 on debian), and search for "meta switch" for details.
16:24rlbIf anyone's interested in something similar for clojure, I might work on it, but for now, I'll probably just use the hack.
16:24rlb(Actually, for now I'll work on emacs23.)
16:24kotarakscsh does it w/o meta switch, just \ as "commandline parameter" and a #! !# block comments...
16:26rlbkotarak: interesting -- and certainly, guile's approach might or might not be the exact one you'd want.
16:26kotarakI'm not familiar with guile.
16:29rlbIt has its good points and its bad points, has suffered from grand expectations, and AFAIK is very well un-liked on #scheme. I've enjoyed working on it though, and learned quite a bit that way.
16:36Chouseryou guys do know that #! is a comment already, right?
16:38Chouser,(+ 2 3) #! this is a comment
16:38clojurebot5
16:42rlbThough you'd need multi-line if you wanted to avoid really long lines and/or stay within POSIX limits.
16:42rlb(assuming the guile docs are right...)
16:48kotarakChouser: huh? When was it introduced?
16:51abetter way to deal with undefined optional args? (defn myfn [a b & [c d]]
16:51a (let [c (if c c 0)
16:51a d (if d d 0)]
16:51a (+ a b c d)))
16:52aoops sorry didn't realize it was going to break it up over multiple lines
16:56kotaraka: (defn myfn ([a b] (myfn a b 0 0)) ([a b c d] ...))
16:57athx
17:00Chouserkotarak: Nov 16, 2008
17:03kotarak-.-
17:04Chouser:-)
17:45hserushello all.. have a question about structs..
17:45hseruslets say i have a struct called library and it has 2 keys, :place and :books
17:46hserushow can i associate a vector to the books?
17:46hserusand each book is again a struct
17:49Chousukea struct is just like a normal map
17:49Chousukeso use assoc
17:50hserusi did.. maybe i messed up something
17:50hserusi want to store a vector of book structs
17:50Chousukecan you show the code?
17:50hserusyes, can i paste it here?
17:50Chousukelisppaste8: url
17:50lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
17:50Chousukeuse that.
17:51hserusthanks, just a sec
17:52Chousukestructs are nothing special, really. they're just normal maps, with the difference that you can generate optimised accessors for the base values should you need them :)
17:53ChousukeI think most people just end up using structs instead of maps not because of the accessors, but because they associate structs with similarly named constructs in other languages :P
17:54lisppaste8hserus pasted "nested structures" at http://paste.lisp.org/display/83802
17:55hserus(:books centrallibrary) returns an empty vector..
17:55arohnerChousuke: you say "can generate optimised accessors", does that mean you have to do something special to get the optimized accessor?
17:55Chousukehserus: that's because you define it so.
17:55Chousukehserus: :)
17:56Chousukehserus: clojure is a functional language. none of the function calls modify centrallibrary; they return new values.
17:56Chousukearohner: yeah
17:57hserusChousuke: so how do i associate a vector of books?
17:57Chousukewith assoc, as you did.
17:57Chousukethe problem is that it returns a new value
17:57hserusbut use the returned one?
17:58Chousukeand you can't modify an existing definition.
17:58ChousukeI suppose what you want is a ref, in this case.
17:58Chousukewhich is kind-of mutable
17:58hserushmmm... kinda makes sense now..
17:59hserusall these years of imperative programming isnt easy to get rid off :)
18:03lisppaste8chousuke annotated #83802 "hm" at http://paste.lisp.org/display/83802#1
18:03Chousukeoops
18:04Chousukein the new centrallibrary line there should be parens around the struct book... stuf
18:04Chousuke+f
18:04hserusgot it
18:05hseruswill i be able to use only structs for this purpose though?
18:05Chousukenah, you could use any values.
18:06Chousukeas I said, structs are just maps with a special property
18:07Chousukeyou could replace your struct calls with literals like {:location "foo" :books [{:title ...}]} and it would make no difference.
18:07hserusok.. so what is that special property of struct?
18:07Chousukeyou can generate optimised accessors for a struct with, hm.
18:08ChousukeI forgot the function
18:08hserusno problem, will look it up from the api
18:08Chousukeduh, accessor :P
18:08Chousukeso (def books-accessor (accessor book :title))
18:08Chousukebut you really should not bother :)
18:09hserussure thing :)
18:09Chousukeunless you're doing hundreds of thousands of lookups with the same key, the accessor is probably not going to help much
18:10rhickeyChousuke: the real benefits of structs is not the accessors, it's the sharing of the keys (and thus space) when you have lots of instances with the same key set
18:11Chousukerhickey: does that matter if the keys are keywords though? :/
18:11ChousukeBut I wasn't aware of that. interesting. :)
18:11rhickeythey are still slots in the map when hash-maps and not in the object when structs
18:12ChousukeI suppose there's no harm in defining structs for your data anyway; if nothing else, it serves as documentation.
18:17hserusanother question, right now there is only a jar (or a bunch of them) as part of the standard download of clojure.. are there plans to bundle simple scripts for repl and executables?
18:19r2q2There is a clj script on wikibooks that seems to work.
18:19hserusi haven't seen it before, will check it out
18:19r2q2http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started
18:20r2q2Its from a blog post on clojure
18:20r2q2http://paulbarry.com/articles/2007/12/22/getting-started-with-clojure works on linux.
18:21hserusi have set aliases on my box, but was just curious if any standard scripts are available..
18:29r2q2hserus: The standard way to run clojure for a repl is "java -cp clojure.jar clojure.main" actually. The shell script just makes it a bit nicer with jline which allows for a history. There is also slime for clojure.
19:39rlbhserus: the debian package also provides "clojure" and "clojure-repl", though I remember thinking that perhaps they could use some improvment.
19:39rlbs/improvment/improvement/
19:40rlb(there are manpages too)
19:40rlbOh right, if nothing else, clojure-repl should probably offer jline support.
20:18iBongprobably a frequent question, but clojure-install in clojure-mode I got from ELP fails because the git repositories don't work... I already installed the clojure tarball, just want to set up slime for clojure in emacs
20:18iBongany help appreciated
20:32prospero_why is /= an invalid token?
21:52danleiprospero: I'd say it's because / is already used as a separator for namespaces.
23:48durka42are mutable maps in the cards?
23:51r2q2durka42: I don't think mutability is in the cards for clojure.
23:57durka42r2q2: mutable vectors arrived today :)
23:57durka42as a performance trick