2009-06-12
| 00:00 | polarbizzler | that will do the trick thanks |
| 00:00 | polarbizzler | i was searching for some examples like on that link forever |
| 00:44 | Drakeson | what is the inverse of interleave? |
| 00:46 | Chouser__ | take-nth |
| 00:46 | Chouser__ | or partition with destructuring |
| 00:54 | Drakeson | thanks |
| 01:17 | dufflebunk | I'm looking at the online api docs for if-let, "(if-let bindings then)" and then it says "If test is true, ..." but there's no "test" in the syntax... just "bindings" and "then". |
| 01:17 | dufflebunk | Should it be (if-let test bindings then) ? |
| 01:17 | dnolen | the binding is the test |
| 01:18 | dnolen | ,(if-let [x nil] true false) |
| 01:18 | clojurebot | false |
| 01:18 | dnolen | ,(if-let [x 1] true false) |
| 01:18 | clojurebot | true |
| 01:18 | dufflebunk | Ah, ok |
| 01:19 | dufflebunk | thanks |
| 01:19 | dnolen | np |
| 01:21 | dufflebunk | so that's what the "binding-form test" part meant. |
| 02:53 | cgrand | eleftherios: I'm here |
| 03:09 | eevar2 | yay, clojure on github |
| 03:12 | opqdonut | proxy can't define new methods? |
| 03:12 | hiredman | nope |
| 03:15 | opqdonut | why :/ |
| 03:16 | hiredman | use gen-interface + proxy |
| 03:18 | opqdonut | gah, i'll just return a map of functions |
| 03:19 | frodef | is there no way to get cond with implicit progns? |
| 03:19 | frodef | I mean, how do I do multiple exprs in a cond clause? |
| 03:19 | hiredman | you mean do |
| 03:20 | hiredman | and no |
| 03:20 | frodef | jhiredman: progn is "do" in clojure? |
| 03:20 | hiredman | you coud just a multimethod instead |
| 03:20 | hiredman | use a |
| 03:20 | hiredman | frodef: I think so |
| 03:21 | hiredman | never used progn or whatever language it is from |
| 03:21 | frodef | right, it's the same. |
| 03:21 | frodef | thanks. |
| 04:45 | frodef | I'm trying to write a swing viewer for my model. What's the good way to keep the model state? |
| 04:46 | jdz_ | a ref? |
| 04:46 | frodef | can/should I do like the java-people and create a class that keeps its state in members? |
| 04:46 | jdz_ | or an atom? |
| 04:46 | jdz_ | a map (or struct-map) then? |
| 04:47 | frodef | jdz: ok, I'll look at those. thanks. |
| 04:48 | jdz | maybe you want a map in a ref/atom |
| 05:18 | Chousuke | frodef: usually you'll want something immutable wrapped in a reference type. |
| 05:18 | Chousuke | a single ref wrapping a map if usually a good starting point |
| 05:26 | opqdonut | what could cause clojure.lang.Compiler.LOADER to be unbound? |
| 05:27 | opqdonut | guess I should be creating my own DynamicLoader |
| 05:29 | opqdonut | that did the trick |
| 06:57 | opqdonut | is there an easy way to access class members by string names |
| 06:58 | mccraig | u want to access a field or call a method ? |
| 06:58 | mccraig | of an instance of a java class ? |
| 07:00 | mccraig | opqdonut: http://gist.github.com/128577 |
| 07:00 | opqdonut | field |
| 07:00 | opqdonut | of an instance |
| 07:00 | mccraig | shows how u can access a field, even a private one |
| 07:00 | mccraig | taking the example of an Agent's state |
| 07:00 | opqdonut | heh, terrible |
| 07:01 | frodef | maps are immutable also, right? |
| 07:01 | mccraig | 'course, the SecurityManager has to be configured lax to permit access to private fields |
| 07:02 | jdz | frodef: yes |
| 07:03 | opqdonut | well i don't need private fields :) |
| 07:03 | mccraig | skip the setAccessible call then, and ur away |
| 07:04 | eevar2__ | ,(doc bean) |
| 07:04 | clojurebot | "([x]); Takes a Java object and returns a read-only implementation of the map abstraction based upon its JavaBean properties." |
| 07:04 | eevar2__ | ^^ opqdonut |
| 07:05 | opqdonut | mccraig: yah |
| 07:05 | opqdonut | eevar2__: ? |
| 07:07 | eevar2__ | may or may not do what you need ;) |
| 07:07 | opqdonut | well, it does not |
| 07:07 | opqdonut | mccraig: http://paste.lisp.org/display/81759 |
| 07:07 | mccraig | eevar2__: JavaBean properties only include fields which have a corresponding java get...() method |
| 07:08 | eevar2__ | hmm.. and i see he asked for class members, guess bean may not be appropriate for that |
| 07:19 | mccraig | opqdonut: does set! not work for u, since it's public fields ? |
| 07:41 | opqdonut | mccraig: i need to set! by string name |
| 07:41 | opqdonut | but gtg -> |
| 07:55 | adityo | newbie question: how do i read from standard input? |
| 07:57 | achim | adityo: read-line, for example |
| 07:58 | adityo | achim: thanks |
| 07:58 | achim | adityo: in is the standard input, a java Reader, you can call java methods on it if you need anything special |
| 07:58 | frodef | any hints on how to best do an event queue between two threads? |
| 08:02 | cemerick | frodef: easiest way is to put a persistent queue in a ref, and access it from your threads inside transactions |
| 08:03 | frodef | cemerick: can I do a blocking read that way? |
| 08:03 | Chouser | frodef: I'd look at java.util.concurrent.BlockingQueue |
| 08:06 | adityo | achim: cool |
| 08:10 | Chousuke | http://www.making-the-web.com/misc/sites-you-visit/nojs/ :/ |
| 08:12 | Chousuke | Apparently, it's possible to for a site to sniff your history by abusing CSS and iframes. I wonder if that's even fixable |
| 08:22 | asbjxrn | I'd call it guess, and not sniff. |
| 08:23 | asbjxrn | Since it relies on showing a link and detecing if the browser displays it as visited or not. |
| 08:23 | asbjxrn | But still.. |
| 09:48 | cemerick | is the github repo now "official"? I see people tweeting about it, but haven't seen an announcement from rhickey |
| 09:48 | Chouser | cemerick: I haven't seen an announcement either. |
| 09:49 | Chouser | It's not clear to me yet if github or assembla will host the official primary repo. |
| 09:50 | cemerick | I *thought* the decision was to use github for the SCM, tools on assembla, but yeah, it's unclear. |
| 09:50 | cemerick | There's a lot of watchers on the github repo already. Word travels fast. :-) |
| 09:50 | Chouser | :-) |
| 09:50 | Chousuke | it doesn't really matter who hosts the main repo anyway ;P |
| 09:51 | cemerick | yeah, same here |
| 09:51 | Chousuke | you can just clone it to your favourite git service anyway |
| 09:51 | duck1123 | is there a fn to convert '(:a "a" :b "b" :c "c") to {:a "a" :b "b" :c "c"} |
| 09:51 | Chouser | Chousuke: depends on how much lag time you're willing to accept between a rhickey push and your own pull. |
| 09:51 | Chousuke | duck1123: apply hash-map |
| 09:51 | Chousuke | Chouser: well, yeah |
| 09:52 | Chousuke | github is a bit slow sometimes :/ |
| 09:52 | Chousuke | but faster than SVN at google code :P |
| 09:52 | cemerick | well, a different clone from svn would have different sha1s, so that could get tricky if you start basing on a repo that isn't blessed. |
| 09:53 | Chouser | Chousuke: no, my point is if rhickey pushes to assembla, I'm not willing to always wait for a nightly poll that transfers it to github. Or whatever. I want my local copy to poll from where he pushes. |
| 09:54 | Chouser | In fact, if I could pull directly from his working copy, that'd be neat. :-) |
| 09:54 | Chousuke | Chouser: right. |
| 09:54 | Chousuke | heh |
| 09:54 | Chousuke | Chouser: I think assembla+git works so that github actually does the hosting and assembla just provides some tools on top of that. |
| 09:55 | rys | I think that's what most people are looking for at the end of the day (to be able to clone rhickey's repo directly and pull from it, so there's no indirection) |
| 09:55 | Chousuke | git can have multiple remotes, so you could pull from several places. |
| 09:56 | Chouser | "I don’t think it would be wise to use github mode and integrated git together, even if they allow it." |
| 09:56 | Chouser | I'm not sure exactly what that means, but I'm willing to wait for final conclusions/announcements. |
| 09:56 | Chousuke | I could have my own public clojure-fork on gitorious or something and then people could have a mainline remote and a chousuke-public remote if they're interested :P |
| 09:56 | rhickey | I've decided not to use assembla's built-int git, but to have it point to github |
| 09:57 | Chouser | ah, so no mirroring |
| 09:57 | rhickey | I'm actively working out the detils, just got IntelliJ all happy with the github version of Clojure |
| 09:58 | rhickey | Chouser: right, assembla doesn't like to have 2 vcs options enabled, go I'm going with the github support |
| 09:58 | walters | i wonder if google is still paying some guy to try to make svn better |
| 09:59 | Chousuke | rhickey: is your git repo already public on github? |
| 09:59 | rys | I _think_ they're directly working on git (TortoiseGit in particular), if memory serves, so I'd bet on seeing git support at googlecode at some point |
| 10:00 | Chouser | Chousuke: people are twittering about it. |
| 10:00 | rhickey | http://github.com/richhickey/clojure/tree |
| 10:00 | rhickey | no pushes yet |
| 10:00 | Chousuke | github's search didn't find that. :/ |
| 10:01 | Chousuke | is clojure-contrib going to move too if this is successful? |
| 10:02 | rhickey | Chousuke: yes |
| 10:02 | Chousuke | great. |
| 10:02 | rhickey | still working out how to organize it - seems like a good time to make the ports (ClojureCLR and ClojureScript) stand alone |
| 10:03 | rhickey | I've come to really dislike gcode's issue system, but need to find a way to port issues over to assembla |
| 10:04 | Chousuke | git has submodule support so you could have the contrib master repo contain those, but perhaps it's not worth the added complexity |
| 10:04 | Chousuke | I still don't know how to use git submodules very well :/ |
| 10:04 | Chousuke | easier to just clone things separately |
| 10:04 | duck1123 | they should be moved to clojure-extras or something IMO |
| 10:04 | Chouser | I doubt it'd be worth anything like that. Java's classpath allows sufficient namespace integration. |
| 10:04 | Chousuke | but, heh, I just cloned your repo. took about 5 seconds. :P |
| 10:05 | Chouser | I'll be happy for clojurescript to have less visibility. :-P |
| 10:06 | rhickey | I could use help devising and implementing plans for all of this, now that I think I know where we are going |
| 10:06 | duck1123 | is it usable yet? It looked interesting, but I couldn't figure out how to use it. (not that I really tried) |
| 10:07 | Chousuke | rhickey: do you think there's any way to automate moving issues to assembla? :/ |
| 10:07 | Chouser | duck1123: it's pretty out of date now. It was in decent shape, nearly usable before the "lazier" changes, but I haven't kept it synced. |
| 10:08 | Chouser | duck1123: I'm not really interested it putting much more effort into it at least until clojure-in-clojure. |
| 10:08 | rhickey | Chousuke: there is this on the assembla side: https://www.assembla.com/wiki/show/breakoutdocs/Ticket_REST_API |
| 10:08 | adityo | quit/ |
| 10:08 | duck1123 | Chouser: I had to write some JQuery recently, and I kept wanting to write in clojure |
| 10:08 | Chouser | duck1123: :-) |
| 10:09 | rhickey | google is notoriously bad about data export |
| 10:10 | Chousuke | rhickey: hmm, right. |
| 10:11 | rhickey | http://code.google.com/p/support/issues/detail?id=1689 |
| 10:12 | rhickey | http://code.google.com/p/support/issues/detail?id=148 |
| 10:15 | Chouser | "we are *actively* working on this right now" (50 minutes ago) -- nice |
| 10:37 | Drakeson | do we have a function similar to this: (defn de-interleave [n coll] (map #(take-nth n %) (take n (iterate next coll)))) ? |
| 10:37 | Drakeson | e.g. (de-interleave 2 [1 2 3 4 5 6]) -> ((1 3 5) (2 4 6)) |
| 10:42 | cgrand | ,(apply map vector (partition 2 [1 2 3 4 5 6])) |
| 10:42 | clojurebot | ([1 3 5] [2 4 6]) |
| 10:43 | cgrand | (not lazy) |
| 10:47 | Drakeson | Is there a lazy version of (apply map vector coll) ? I would call it transpose. |
| 10:47 | Drakeson | (transpose [[1 2 3][4 5 6][7 8 9]]) -> [[1 4 7][2 5 8][3 6 9]] |
| 10:52 | duck1123 | Does anyone know of any good search engine like sites (other than google) where I can input a class and get the javadoc for it? Preferably with a search plugin. |
| 10:54 | Drakeson | I would appreciate an interface to such in slime (via C-c I) |
| 10:56 | duck1123 | I have an javadoc emacs plugin, but I never use it much |
| 10:56 | duck1123 | I had to add all the javadoc sources, and it was kinda buggy |
| 11:00 | cemerick | duck1123: yahoo used to have a great javadoc search feature, though they pulled it last wee (don't know why) |
| 11:00 | duck1123 | I found javadoconline.com, but I'm not sure if I really care for it yet |
| 11:01 | cemerick | I'd love to have something like http://clj-doc.s3.amazonaws.com/tmp/doc-1116/index.html for javadoc |
| 11:06 | hiredman | ~jdoc String |
| 11:06 | hiredman | http://www.docjar.com/ has decent javadoc coverage |
| 11:08 | duck1123 | hiredman: thanks, I'll give that one a try |
| 11:14 | j-dot | duck1123: if you have the Google Toolbar installed, there is a custom search button here: http://www.javac.info/jdk_search.xml |
| 11:16 | duck1123 | j-dot: I don't. I use the firefox omnisearch plugin. (makes the address bar behave like chrome) |
| 11:17 | j-dot | cool, for anyone else who's interested, the write-up and link to install it is here: http://gafter.blogspot.com/2009/03/jdk-api-search-in-google-toolbar.html |
| 11:19 | duck1123 | i think i just need to start using the emacs plugin i had again |
| 11:43 | Chousuke | I think Mark Volkmann's clojure article should perhaps be featured on clojure.org. It seems great for people looking for an introduction into Clojure. |
| 11:44 | Chousuke | Appears to be much better organised and up to date than the wiki pages :P |
| 11:48 | drewr | duck1123: The Clojure Search does a pretty good job: http://is.gd/ZUZ8/BufferedReader |
| 11:49 | hiredman | it would be neat if github did pubsub so I could just have clojurebot subscribe |
| 11:50 | duck1123 | hiredman: agreed |
| 11:50 | hiredman | of course then I would need to figure out pubsub |
| 11:50 | duck1123 | is clojurebot on xmpp yet? |
| 11:50 | hiredman | nope |
| 11:51 | duck1123 | I've been meaning to work on a clojure library for igniterealtime's xmpp library when I get around to it |
| 11:52 | hiredman | I've started a few times |
| 11:53 | duck1123 | is anyone else here currently using clj-record? |
| 11:54 | duck1123 | currently, (get-record 7) throws an exception if that id doesn't exist. Personally, I think it should return nil. Any opinions? |
| 11:55 | cp2 | hrm |
| 11:55 | cp2 | well, it depends on how you are using it i suppose |
| 11:56 | cp2 | 'nil' could be a perfectly legal value in your application |
| 11:56 | duck1123 | the record will always be a map though |
| 11:56 | duck1123 | so in this case nil is an illegal value |
| 11:57 | cp2 | yeah, then in that case |
| 11:57 | cp2 | i would prefer it returning nil |
| 11:57 | cp2 | because you can just do (if-let [record (get-record 7)] ... |
| 11:58 | duck1123 | that's exactly how i've been using it in my fork |
| 12:02 | hiredman | ugh |
| 12:03 | hiredman | git shas are not as nice as svn revisions |
| 12:03 | Chousuke | heh :P |
| 12:04 | hiredman | ~latest |
| 12:04 | clojurebot | latest is 1382 |
| 12:05 | Chousuke | revision numbers only make sense locally to a branch. In that respect, hg does it right. |
| 12:05 | hiredman | how is that even going to work? |
| 12:05 | hiredman | just hold the date of the last check in? |
| 12:05 | Chouser | hiredman: ooh, I like that idea |
| 12:05 | Chousuke | or the commit message. |
| 12:07 | duck1123 | first line only |
| 12:08 | Chouser | commit message is the "normal" git way I think, but when we have a single official repo, timestamp would give a nice sense of whether you're up to date or not |
| 12:08 | Chousuke | the problem is, when doing commits, git actually records the date. |
| 12:09 | Chousuke | but that's no guarantee of when the commit will appear in the mainline |
| 12:09 | Chousuke | you could have it in the private repo for half a year, and then when you finally merge, you will have half-year-old commits at the top of the log :) |
| 12:09 | Chouser | wouldn't the merge get a new timestamp? |
| 12:10 | Chousuke | the merge commit does but the actual commits being merged are separate. |
| 12:11 | Chousuke | I can't remember whether the merge commit ends up at the "top" or not :/ |
| 12:11 | Chousuke | hmm, seems like it does. |
| 12:12 | hiredman | I get two dates from the github api |
| 12:12 | hiredman | :committed_date and authored_date |
| 12:12 | Chousuke | maybe committed_date means "pushed_date" instead :/ |
| 12:15 | hiredman | ugh |
| 12:16 | hiredman | the dates from github have a single colon in the timezone specifier that prevents SimpleDateFormat from parsing them |
| 12:18 | duck1123 | I wish SimpleDateFormat could work with xsd:dateTime |
| 12:19 | duck1123 | it's so annoying to have to write custom code for that. (or use jodatime) |
| 12:19 | hiredman | (.replaceAll datestring "([+-])(\\d\\d):(\\d\\d)" "$1$2$3") |
| 12:20 | hiredman | so horrible |
| 12:22 | doug_ | Is there an easy way of making a hash-set from a coll? I resorted to this: (defn hash-set-from [coll] (reduce #(conj %1 (keyword %2)) (hash-set) coll)) |
| 12:23 | hiredman | there are several |
| 12:23 | hiredman | ,(apply hash-set '(1 2 3)) |
| 12:23 | clojurebot | #{1 2 3} |
| 12:24 | hiredman | ,(into (hash-set) '(1 2 3)) |
| 12:24 | clojurebot | #{1 2 3} |
| 12:24 | dnolen | ,(set [1 2 3 4 5]) |
| 12:24 | clojurebot | #{1 2 3 4 5} |
| 12:24 | hiredman | ,(class {}) |
| 12:24 | clojurebot | clojure.lang.PersistentArrayMap |
| 12:24 | hiredman | ,(class #{}) |
| 12:24 | clojurebot | clojure.lang.PersistentHashSet |
| 12:24 | dnolen | set takes a collection and produces a hash-set |
| 12:25 | doug_ | thanks very much for hash-set tips. |
| 12:27 | Chousuke | hmm. |
| 12:30 | Chousuke | ,(apply hash-set [1 2 3 4 5]) |
| 12:30 | clojurebot | #{1 2 3 4 5} |
| 12:30 | Chousuke | :) |
| 12:30 | Chousuke | oh, it was up there. |
| 12:31 | Chousuke | missed it ;/ |
| 12:40 | duck1123 | is there a version of find-doc that just returns the symbols? |
| 12:41 | duck1123 | I can often figure out what I'm looking for just by seeing the name |
| 12:43 | Chousuke | duck1123: unfortunately not :/ |
| 12:46 | marklar | lisppaste8: paste? |
| 12:46 | marklar | clojurebot: paste? |
| 12:46 | clojurebot | lisppaste8, url |
| 12:46 | lisppaste8 | To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste. |
| 12:46 | lisppaste8 | marklar pasted "Show-doc" at http://paste.lisp.org/display/81772 |
| 12:47 | marklar | duck1123: not exactly what you were looking for, but it may help. Wish I could remember who wrote it |
| 12:47 | marklar | thickey: Thanks again :) |
| 12:47 | thickey | np :) |
| 12:49 | duck1123 | that actually looks more useful than what I was asking for |
| 12:49 | stuartsierra | Android Scripting Environment! http://tinyurl.com/ku2gj5 |
| 12:49 | thickey | does anyone know more about the Clojure Object Explorer that was shown at the Bay Area Clojure Meetup? |
| 12:49 | marklar | stuartsierra: whoa, thats cool |
| 12:51 | technomancy | thickey: that'd be replaca's project |
| 12:52 | technomancy | thickey: http://github.com/tomfaulhaber/clj-explorer/tree/master |
| 12:52 | thickey | technomancy: thanks |
| 13:26 | replaca | thickey: yeah, I know a little about it :-) |
| 13:27 | replaca | thickey: anything I can tell you besides the pointer technomancy sent you? It's still very young. |
| 13:28 | thickey | replaca: i don't have any questions at the moment. i just wanted to see it in action |
| 13:29 | cp2 | shutup.lua |
| 13:29 | cp2 | hehe |
| 13:30 | replaca | thickey: cool. You can just grab it and play. But there's no doc yet |
| 13:31 | replaca | the interesting things are that you can click on the text and it expands or contracts stuff |
| 13:31 | replaca | and you can change the pretty print dispatch function so that you can have it operate on XML, json or what ever |
| 13:32 | thickey | replaca: cool stuff. thanks |
| 13:32 | replaca | thickey: enjoy, and keep an eye on it cause I'll be making it "more real" as we go along |
| 13:49 | rhickey | name solicitation time again: single-assignment, block until available dataflow variables create with ___, assign with ___, deref with deref/@ |
| 13:50 | rhickey | dataflow, flow, flow1, ivar |
| 13:56 | cemerick | a little more context is probably necessary :-) |
| 13:57 | cemerick | is this being bolted into refs, or is it something else entirely? |
| 13:58 | Chouser | this isn't future? |
| 13:58 | Chouser | more like a single-item BlockingQueue? |
| 13:59 | rhickey | it's a lot like an Oz dataflow var, without any unification bits. It's like a future but the source isn't determined at creation time - someone must come along and write to it, any readers arriving prior to that will block, all release with value once written, subsequent readers will always see that value, subsequent write throws |
| 13:59 | hiredman | ooo |
| 14:00 | rhickey | so, not like a queue in that there are multiple readers of the one value |
| 14:00 | Chouser | oh, multiple readers for a single value ... right. |
| 14:00 | cemerick | hrm, interesting. |
| 14:01 | hiredman | worm |
| 14:01 | cemerick | personally, I'd keep away from the flow-related names, which generally are associated with cells impls and constraint propagation in general (in my experience) |
| 14:01 | Chouser | future could be built on it |
| 14:01 | hiredman | http://en.wikipedia.org/wiki/Write_Once_Read_Many |
| 14:03 | lisppaste8 | rhickey pasted "flows" at http://paste.lisp.org/display/81776 |
| 14:03 | Chouser | (let [x (dam)] (release! x 5)) |
| 14:03 | rhickey | cemerick: right, I'm not happy with flow and dataflow, people use them for very different things |
| 14:05 | rhickey | was ivar in Haskell |
| 14:05 | rhickey | IVar |
| 14:06 | rhickey | but var already has implications |
| 14:06 | Chouser | it's a blocking bucket |
| 14:07 | rhickey | how appealing |
| 14:07 | Chouser | hehe |
| 14:07 | Chouser | a cork |
| 14:08 | Chouser | hey, I implemented this using a wather |
| 14:08 | Chouser | watcher |
| 14:09 | Chouser | on an IRef. ...an atom in my case. |
| 14:09 | rhickey | what prevented subsequent assignment? |
| 14:10 | cemerick | gap? e.g. once filled, hard (impossible) to fill again |
| 14:10 | Chouser | hm, I guess more accurately I could have used this. Instead I wrote await-iref |
| 14:10 | rhickey | http://en.wikipedia.org/wiki/Futures_and_promises |
| 14:11 | rhickey | according to that, 'promise' fits |
| 14:12 | Chouser | http://paste.lisp.org/display/81237#2 -- await-iref |
| 14:12 | cemerick | rhickey: of course, scheme's promises are clojure's delays |
| 14:13 | rhickey | right, it's a mess |
| 14:13 | rhickey | same thing called promise, ivar, dataflow var |
| 14:13 | cemerick | the latter are nearly meaningless to me :-) |
| 14:13 | cemerick | latter two... |
| 14:14 | Chouser | and just as bad, promise and var mean other things in other places |
| 14:14 | rhickey | but promise was a bad name for what Clojure calls delay, IMO, and fits this well |
| 14:15 | lisppaste8 | rhickey annotated #81237 "flow/promise" at http://paste.lisp.org/display/81237#3 |
| 14:15 | Chouser | interesting that it's got a constructor that creates a new identity, but takes no args. |
| 14:16 | rhickey | thus the promise notion |
| 14:16 | rhickey | someone else is going to complete the construction |
| 14:17 | dnolen | curious are there particularly good use cases for dataflow vars, never used anything like them before. |
| 14:17 | Chouser | what does the I in Haskell's IVar stand for? |
| 14:17 | rhickey | immutable |
| 14:17 | Chouser | ahhh |
| 14:18 | rhickey | from Id I-vars |
| 14:18 | cemerick | actually, hiredman mentioned 'worm', which doesn't seem so bad (accurate and unambiguous, anyway) |
| 14:19 | rhickey | I'm not putting a worm in my language |
| 14:19 | technomancy | spit/slurp is bad enough, eh? =) |
| 14:19 | rhickey | var1 once |
| 14:20 | hiredman | I like promise |
| 14:20 | cemerick | +1 promise, compared to the other options |
| 14:21 | Chouser | is this really the only thing we're ever going to want to promise? |
| 14:21 | Chouser | that's also a word that's used somewhat coloquially when talking about the api. |
| 14:22 | Chouser | hash-maps return integer keys in order, but that's not a promise. |
| 14:22 | Chouser | on the other hand, it's not nearly as bad as the two meanings of map, so maybe we're ok. |
| 14:22 | rhickey | pvar |
| 14:22 | Chouser | var-once |
| 14:23 | rhickey | since if you are reading another thread better be writing |
| 14:23 | rhickey | :) |
| 14:24 | Chouser | I don't like the re-use of "var" (in my last suggestiong either) |
| 14:25 | Chouser | maybe "var" can be renamed. :-) |
| 14:25 | replaca | speaking of futures and pvars, is there any way to tell if a future has a value other than waiting for it? I'd liek to be able to look at the value if it's there but go off and do something else if it's not ready yet |
| 14:25 | replaca | *LIKE |
| 14:26 | Chouser | (.isDone f) |
| 14:26 | rhickey | replaca: future-done? will go in with this checkin |
| 14:27 | rhickey | right now setting the promise/pvar/whatever is a fn call, but I'd like to encapsulate that, maybe if we name that we'll get some clues |
| 14:28 | cemerick | jail/capture? |
| 14:28 | rhickey | (put pv 42) |
| 14:28 | hiredman | isn't pvar that parallel var thing? |
| 14:28 | hiredman | ah, pvalues |
| 14:30 | Chouser | you deliver on a promise, don't you? |
| 14:30 | hiredman | ooo |
| 14:31 | Chouser | or fulfill |
| 14:32 | Chouser | promise-val, deliver-val! |
| 14:32 | Chouser | :-/ |
| 14:33 | rhickey | (def p (put)) |
| 14:33 | rhickey | (put p 42) |
| 14:34 | Chouser | I like the namespace conservation, but that might be a tad confusing. |
| 14:34 | rhickey | I wish it had a more meaningful connection to put options, where the noun/verd thing works |
| 14:36 | Chouser | these won't allow validators? |
| 14:36 | rhickey | no |
| 14:36 | Chouser | what about watchers. ;-) |
| 14:37 | rhickey | these are supposed to be fairly primitive things |
| 14:37 | rhickey | the first Clojure workflow constructs |
| 14:40 | gnuvince | Are some of you going to participate in this year's ICFP contest? |
| 14:41 | rhickey | gnuvince: would be fun, don't know about my availability yet |
| 14:53 | rhickey | variable ? |
| 14:54 | replaca | rhickey: oops, wandered off. Thanks! |
| 14:55 | rhickey | (def b (unbound)) |
| 14:55 | rhickey | (bind b 42) |
| 14:55 | rhickey | bindable |
| 14:55 | replaca | Chouser: I was just reading a post where you were railing against undocumented interfaces and now you're recommending one to me. :-) |
| 14:57 | Chouser | replaca: :-) :-) |
| 14:57 | hiredman | bind doesn't suggest blocking |
| 14:57 | rhickey | bind doesn't block |
| 14:58 | Chouser | (def b (will-bind)) (bind b 42) |
| 14:58 | hiredman | fine |
| 14:58 | rhickey | pending |
| 14:58 | Chouser | hm! |
| 14:58 | cemerick | ooh, I just thought of pending too :-) |
| 14:58 | gnuvince | Another ref type? |
| 14:58 | Chouser | (def b (pending)) (pend b 42) ? |
| 14:59 | rhickey | gnuvince: not really, in that refs are really for state, these are one-shots |
| 14:59 | cemerick | (def b (pending)) (complete b 42) ? |
| 14:59 | zargon_ | hmm, whats the difference between :while / :when modifier in for loops? |
| 14:59 | gnuvince | rhickey: what's the use case scenario? |
| 14:59 | hiredman | :while is like take-while :when is like filter |
| 14:59 | cemerick | pending/deliver, pending/fulfill |
| 15:00 | zargon_ | hiredman: thx |
| 15:00 | cemerick | rhickey: doesn't that guarantee confusion given binding (totally different concepts, but I guess that's my point) |
| 15:00 | rhickey | gnuvince: plenty, you can build whole workflow systems out of things like this - see Mozart/Oz |
| 15:00 | rhickey | cemerick: yes, just riffing |
| 15:01 | Chouser | I like pending -- seems more specific than promise |
| 15:01 | Chouser | provide? put? fulfill? |
| 15:01 | rhickey | pending/fill |
| 15:02 | replaca | rhickey: i like pending/fill! |
| 15:02 | zargon_ | ,(for [x (range 3) y (range 3) :while (< y x)] [x y]) |
| 15:02 | clojurebot | ([1 0] [2 0] [2 1]) |
| 15:03 | zargon_ | hmm, why is that? shouldn't that be empty? |
| 15:03 | zargon_ | it should stop immediately in the first iteration ...? |
| 15:04 | Chouser | :while applies to the level of the loop it appears after |
| 15:04 | zargon_ | ahhh! |
| 15:04 | zargon_ | there's much more behind for than the docs suggest ... |
| 15:05 | rhickey | Chouser: no, while should be an abort as soon as false |
| 15:05 | zargon_ | huh? |
| 15:06 | Chouser | it aborts y in that example, but not x |
| 15:06 | rhickey | hrm |
| 15:06 | rhickey | how could one bail overall then? |
| 15:07 | bhurt | Stupid question of the day: if I pass nil into a java function, does it become null? |
| 15:07 | Chouser | bhurt: yes, nil is null |
| 15:07 | bhurt | Thanks. |
| 15:09 | Chouser | rhickey: well, you can put a :while on x as well, but of course you wouldn't be able to examine y there. |
| 15:30 | rhickey | Chouser: yeah, I guess that's how it's always been: http://groups.google.com/group/clojure/browse_frm/thread/34724b7b13b3e2ed/6f4ed88d53f12423?#6f4ed88d53f12423 |
| 15:31 | rhickey | do we need :bail ? |
| 15:31 | Chouser | I don't think I've needed it, but that's probably not saying much. |
| 15:33 | grammati | :break-if ? |
| 15:37 | rhickey | void/fill ? |
| 15:38 | Chouser | heh |
| 15:38 | Chouser | pending/supply? |
| 15:38 | Chouser | pending/unpend? |
| 15:38 | Chouser | pending/depend? |
| 15:39 | rhickey | pending is not growing on me, I kept forgetting it, and it's not a noun, unless we start calling these things pendings - ick |
| 15:42 | rhickey | promise/fill or promise/deliver work - lots of people misspell fulfill |
| 15:42 | zargon_ | rhickey: would you mind to add a clarifying statement to the api docs on "for"? |
| 15:43 | rhickey | zargon_: seems to need it |
| 15:43 | zargon_ | thx |
| 15:48 | rhickey | pend/fill ? |
| 15:48 | Chouser | not bad. you're ok calling them "pends"? |
| 15:49 | rhickey | I don;t know |
| 15:49 | hiredman | a pend is a hallway |
| 15:49 | Chouser | promise/fill isn't too bad either |
| 15:51 | grammati | I missed most of the conversation and don't really know what you're talking about, but... how about a "deferred"? (as in twisted) |
| 15:51 | rhickey | pendent |
| 15:52 | rhickey | also pendant |
| 15:55 | wlr | defer/complete |
| 15:55 | cemerick | that's not bad |
| 15:56 | rhickey | defer syn/delay |
| 15:56 | rhickey | we're not supplying the work at construction |
| 15:57 | rhickey | pending/pendent is the right notion |
| 15:57 | cemerick | trap/fill? |
| 15:58 | j-dot | pendent/settle? |
| 15:59 | gnuvince | suspension/DISBELIEF! ? |
| 15:59 | kefka | If I'm doing lots (multi-MB) of binary I/O for IPC and mostly RPC, what resources (Clojure libraries, Java classes) are the fastest? |
| 15:59 | cemerick | gnuvince: :-D |
| 15:59 | gnuvince | If I understand correctly, we're looking for a noun/verb pair? |
| 15:59 | rhickey | gnuvince: constructor/setter |
| 16:00 | gnuvince | I got all these stupid ieads :-/ |
| 16:00 | gnuvince | raincheck/cash-in |
| 16:00 | gnuvince | rhickey: you got a thesaurus handy? |
| 16:01 | gnuvince | You could look up synonyms for "suspension" or something like that |
| 16:01 | rhickey | don't we all? http://thesaurus.reference.com/ |
| 16:01 | Chouser | wait, are you on the *internet*!?! |
| 16:01 | cemerick | get out of the house! They're in the tubes! |
| 16:02 | j-dot | obligation/deliver, obligation/oblige? |
| 16:02 | gnuvince | ,defer |
| 16:02 | clojurebot | java.lang.Exception: Unable to resolve symbol: defer in this context |
| 16:02 | grammati | unbound/bind |
| 16:03 | gnuvince | oh wait, not a noun :-/ |
| 16:03 | Chouser | ,(doc delay) |
| 16:03 | clojurebot | "([& body]); Takes a body of expressions and yields a Delay object that will invoke the body only the first time it is forced (with force), and will cache the result and return it on all subsequent force calls." |
| 16:03 | kotarak | the eternal struggle for good names? |
| 16:03 | gnuvince | postponement? |
| 16:05 | kefka | Note on the above: can't use duck-streams (I don't think) because this is binary, not character data. |
| 16:07 | rhickey | need/fill |
| 16:08 | rhickey | if our programs have needs they'll be that much closer to consciousness, AI here we come! |
| 16:09 | hiredman | ~need |
| 16:09 | clojurebot | the world <reply>what the world needs is more higher order functions |
| 16:09 | gnuvince | we should have a wiki for those kind of things... |
| 16:11 | rhickey | demand/supply - did someone say that/ |
| 16:11 | rhickey | ? |
| 16:11 | wlr | announce/deliver |
| 16:12 | hiredman | debit/credit |
| 16:13 | gnuvince | ,promise |
| 16:13 | clojurebot | java.lang.Exception: Unable to resolve symbol: promise in this context |
| 16:14 | gnuvince | promise/deliver? |
| 16:14 | gnuvince | rhickey: the constructor will not actually fill in a value, that'll happen with the setter (once), right? |
| 16:14 | rhickey | gnuvince: right, it's a no-arg ctor |
| 16:15 | gnuvince | dig/fill? |
| 16:15 | rhickey | thus the preference for a noun that can also be used to refer to these constructs - that's why promise is good |
| 16:16 | gnuvince | What I slightly dislike about promise is that I think I've seen it used in other languages to delay a value and force it later. |
| 16:16 | gnuvince | That might be in SICP |
| 16:17 | rhickey | pend[ing] is nice because it hints at the blocking that will occur of you read before filled |
| 16:17 | gnuvince | pending I liked |
| 16:17 | gnuvince | But you said it was growing on you :-/ |
| 16:18 | rhickey | wasn't |
| 16:18 | gnuvince | right |
| 16:18 | gnuvince | sorry |
| 16:19 | kotarak | imagine/realize |
| 16:20 | rhickey | first word noun is best |
| 16:23 | gnuvince | How do you feel about "raincheck" for the constructor? |
| 16:23 | rhickey | not too good |
| 16:23 | rhickey | :) |
| 16:23 | gnuvince | No problem :) |
| 16:24 | gnuvince | Just surfing on thesaurus.com |
| 16:25 | gnuvince | pledge? |
| 16:25 | rhickey | promise/deliver seems decent |
| 16:26 | rhickey | of course. in langs where these are primitives it just looks like variable declaration and assignment :( |
| 16:30 | Chouser | interesting that import is a macro |
| 16:30 | Chouser | ...when require and use are not |
| 16:30 | kotarak | This changed lately, no? |
| 16:30 | Chouser | kotarak: oh, perhaps you're right. |
| 16:31 | Chouser | indeed. import is a fn in 1.0 |
| 16:31 | Chouser | kotarak: thanks |
| 16:31 | rhickey | Chouser: require and use should be, but there will be some breakage because they are called by Java host programs. Will need fn versions too, that take classLoader arg |
| 16:32 | rhickey | this to enable use of caller's classloader |
| 16:32 | Chouser | ok, that'll be nice. |
| 16:36 | rzoom | why does this work: (Float. ({:a "3"} :a)) |
| 16:36 | rzoom | and not this: (float ({:a "3"} :a)) |
| 16:36 | Chouser | rzoom: float is a simple type case. |
| 16:37 | Chouser | rzoom: (Float. x) call the object constructor |
| 16:37 | rhickey | last call - any objections to promise/deliver? |
| 16:37 | Chouser | The Float class has a constructor that takes a string. |
| 16:37 | duncanm | how do i take the last 5 elements of a seq? |
| 16:37 | duncanm | there's no TAKE-LAST |
| 16:38 | rhickey | ,(doc butlast) |
| 16:38 | clojurebot | "([coll]); Return a seq of all but the last item in coll, in linear time" |
| 16:38 | kotarak | (drop (- (count the-seq) 5) the-seq) |
| 16:38 | rhickey | oh, 5 |
| 16:39 | kotarak | Beware of (iterate inc 0).... |
| 16:39 | hiredman | heh |
| 16:39 | duncanm | if drop takes a negative number, i guess that works too |
| 16:40 | duncanm | oh wait |
| 16:40 | duncanm | i get it |
| 16:41 | duncanm | it might be handy to have TAKE-LAST |
| 16:41 | Chouser | last could take an optional count arg |
| 16:42 | duncanm | right |
| 16:42 | kotarak | (defn take-last [n s] (drop (max (- (count s) n) 0) s)) |
| 16:42 | rhickey | Chouser's idea is best, add n arg to last |
| 16:42 | Chouser | (reverse (take 5 (reverse x))) |
| 16:43 | hiredman | ick |
| 16:43 | rhickey | ow! |
| 16:43 | Chouser | :-) |
| 16:43 | hiredman | it seems like a lazy-seq and a N element ring buffer might be best |
| 16:44 | Chouser | can't be done lazily |
| 16:44 | kotarak | Because it's not a stopping time. |
| 16:45 | hiredman | oh |
| 16:45 | hiredman | right |
| 16:45 | hiredman | to put things in the buffer you would have to realize them, of course |
| 16:47 | rhickey | oh no, canceled/cancelled - Futures use double L |
| 16:48 | rzoom | can classes be passed as function arguments? e.g. (defn f [t v] (new t v)) to create an instance of type t, using v as the arg to the constructor. |
| 16:48 | rzoom | this is not making clj happy |
| 16:49 | Chouser | rzoom: a class can be passed, but you cannot just call new on it then. |
| 16:49 | Chouser | you'd need to call a method of the Class class, like (.newInstance t) |
| 16:52 | Chouser | or something like: (clojure.lang.Reflector/invokeConstructor Integer (to-array ["5"])) |
| 16:54 | rzoom | looks like there is no way around that Reflector call, i guesss. |
| 16:55 | Chouser | there are a couple techniques that might help, depending on your situation. |
| 16:55 | Chouser | Sometimes I've been able to pass around a clojure fn that will construct the object, rather than the class itself. |
| 16:56 | rzoom | basically, i am just looking for a easy way to convert strings to various basic java types |
| 16:56 | hiredman | erm |
| 16:56 | hiredman | easiest is read-string |
| 16:57 | Chouser | that's even slower than the reflector call. :-) |
| 16:57 | rzoom | well, taking a map as an arg |
| 16:57 | Chouser | but nice and general. |
| 16:57 | Chouser | rzoom: a map of? |
| 16:58 | rzoom | e.g. {:a "3.5", :b "7"} would like to be able to convert :a value to float, and :b value to int |
| 16:58 | Chouser | rzoom: how do you decide what type to convert to? |
| 16:59 | rzoom | i can hard-code that |
| 16:59 | rzoom | all :a's are going to be floats, all :b's ints, etc. |
| 16:59 | Chouser | {:a (Float. (:a mymap)), :b (Integer. (:b mymap))} |
| 17:00 | rzoom | so, i thought about a function to take a value and a type and return the converted value, then assoc new value |
| 17:01 | hiredman | (update-in map [:a] #(Float. %)) |
| 17:01 | hiredman | ,(-> {:a "3.5", :b "7"} (update-in [:a] #(Float. %)) (update-in [:b] #(Integer. %))) |
| 17:01 | clojurebot | {:a 3.5, :b 7} |
| 17:01 | kotarak | Float. not problematic? I though there was some Float/parseFloat or something, which was preferred. |
| 17:02 | rzoom | hiredman: that is pretty good. |
| 17:04 | kotarak | (w/o in) |
| 17:05 | Chouser | ,(into {} (for [[k v] {:a "3.5", :b "7"}] [k (({:a #(Float. %), :b #(Integer. %)} k) v)])) |
| 17:05 | clojurebot | {:b 7, :a 3.5} |
| 17:06 | rzoom | hmmmm. i guess that the best way to pass a class is just to do the Reflector call |
| 17:06 | rzoom | the trouble being that there are a lot of keys, so being able to pass a list of keys to convert would be prettier. |
| 17:07 | Chouser | If all you're using the class for is to construct it, I'd recommend looking at passing around clojure fns instead, as both hiredman and I demonstrated. |
| 17:07 | hiredman | make a multimethod |
| 17:07 | rzoom | yeah, that is probably a good idea, will go with fn passing. |
| 17:07 | Chouser | That lets you use a static factory method instead, or constructor, or whatever. Plus it'll run faster that the reflector call. |
| 17:07 | Chouser | than |
| 17:09 | hiredman | you can make a multimethod that dispatches on (fn [[a]] a) and map it over your map and then pour the resulting seq back into a map with into |
| 17:16 | replaca | rhickey: so where do contrib commits go now? github, svn, please wait, or other? |
| 17:16 | Chouser | where 'last' is defined in core.clj, there's no math yet. 'dec' isn't defined. |
| 17:18 | kotarak | So was git chosen? |
| 17:21 | replaca | kotarak: seems like we're almost there, if not quite. Last I heard, it was all still "experimental" |
| 17:22 | kotarak | replaca: well, I hoped for hg, but with hg-git it will hopefully work... |
| 17:33 | replaca | kotarak: yeah, I didn't have much opinion, but I'm used to git so it's pretty good by me (one less thing to learn :-)). I've tried git on windows (a little) this week and it seems to be not too bad |
| 17:35 | kotarak | replaca: I don't really care, I prefer hg mostly for philosophical reasons. I don't think there is much difference. hg or git don't buy each other much. And with hg-git by the github guys there's a bridge between the worlds. :) |
| 17:36 | technomancy | kotarak: yeah, nice timing on that. |
| 17:38 | bhurt | Having worked with both git and hg now, I think git is somewhat better for open source style development, but hg is better for a more centralized/corporate environment. |
| 17:38 | bhurt | I HATE HATE HATE bazaar. |
| 18:09 | rhickey | first commit to github! http://github.com/richhickey/clojure/tree/master |
| 18:11 | liebke | woot! I saw the tweet :) |
| 18:11 | rhickey | just need to coordinate the move for contrib - any contribbers on? |
| 18:15 | rhickey | hrm, I can't admin the clojure-contrib on github until I've imported the repo? I'd like to add collaborators who could help with that... |
| 18:16 | technomancy | you can create a blank repo and push to it after the fact. |
| 18:16 | rhickey | I want to use their svn import, a one-time thing |
| 18:16 | technomancy | oh, server-side import, right. I don't know about that. |
| 18:17 | rhickey | ah, direct url works |
| 18:23 | arohner | is it possible to call apply on a java method? |
| 18:23 | arohner | i.e. (apply .foo instance args)? |
| 18:24 | rhickey | arohner: no, Java methods are not proper functions |
| 18:24 | kotarak | arohner: http://paste.lisp.org/display/67182 by rhickey |
| 18:25 | arohner | excellent! thanks |
| 18:27 | replaca | rhickey: my idea about how to freeze: just tell us to stop for a day or so. Stephen and Stuart S. have been the big committers the last week or so. |
| 18:29 | replaca | bbl |
| 19:37 | mrsolo | http://paste.lisp.org/display/81782 any better way to do this? I found out that assoc is the only way to retain original comparator for sortedhash |
| 19:38 | Chousuke | mrsolo: wouldn't (into cur-result (...)) work? |
| 19:39 | mrsolo | no |
| 19:39 | mrsolo | will it? |
| 19:39 | mrsolo | hmm |
| 19:39 | mrsolo | let me try |
| 19:39 | mrsolo | i was doing (into {} |
| 19:40 | kotarak | and (apply assoc cur-result ...), partial is not needed |
| 19:42 | mrsolo | chousuke: oh yea it works thanks :-) |
| 19:42 | mrsolo | kotarak: you right...nice to know |
| 19:43 | kotarak | also nice idiom: (into (empty foo) ...) |
| 19:43 | Chousuke | yeah. preserves the type |
| 19:44 | kotarak | mrsolo: well you do it in your anon fn: (apply generate-tree (second x) more) |
| 19:44 | mrsolo | http://paste.lisp.org/display/81783 alternative form, |
| 19:45 | mrsolo | kotarak: ya my concept isn't that strong yet..need reiforcements :-) |
| 19:45 | mrsolo | nice empty is very handy |
| 19:58 | mrsolo | ack empty doesn't peserve comparator |
| 19:59 | mrsolo | http://paste.lisp.org/display/81786 |
| 20:18 | Chouser | mrsolo: that's a sorted map? |
| 20:19 | Chouser | sorted-map-by? |
| 20:20 | Chouser | sure enough. probably counts as a bug. |
| 20:22 | mrsolo | ya sorted map |
| 20:51 | JAS4151 | I'm not sure how to word my question, but I made a 'stateful' generator in clojure using lazy sequences and atoms to calculate the Fibonacci sequence, (here http://paste.lisp.org/display/81789#1 ... the fib-seq function... don't execute int he repl as it will just go on forever and crash clojure... use with take-n or something), is there an easier way to do this in Clojure? I know that in Common Lisp I would use variable capture instead of usi |
| 20:54 | stuhood | there is a definitely an easier |
| 20:54 | stuhood | way |
| 20:56 | JAS4151 | cool |
| 20:56 | stuhood | check out the functions "lazy-seq-fibo" and "fibo" from the Programming Clojure example code: http://github.com/stuarthalloway/programming-clojure/blob/cb0944e31490c0198a1ad2761b08a379fa73f480/examples/functional.clj |
| 20:58 | JAS4151 | ok thanks, i'll look over these |
| 21:00 | JAS4151 | ah so clojure works like erlang and you can match against number of arguments? |
| 21:00 | JAS4151 | that's cool |
| 21:04 | stuhood | yea... pretty handy |
| 21:05 | stuhood | you can also do destructuring in function arguments, which is similar to pattern matching, but not quite as powerful |
| 21:10 | JAS4151 | i was reading about that, looks like it might be more useful than destructing-bind in common lisp |
| 21:55 | Chouser__ | I cloned the clojure git repo, but it doesn't seem to have any branches in it. What did I do wrong? |
| 21:57 | arbscht | other than master, you mean? |
| 21:59 | Chouser__ | yeah |
| 21:59 | Chouser__ | I want 1.0 as well |
| 21:59 | arbscht | try git branch -a |
| 21:59 | arbscht | you should be able to checkout 1.0 from origin |
| 22:00 | Chouser__ | gah |
| 22:00 | Chouser__ | yes, that did it, thanks. |
| 22:00 | Chouser__ | I thought just "git branch" would show them all. |
| 22:01 | arbscht | that shows local branches only |
| 22:01 | arbscht | make a local tracking branch if you want to modify 1.0 |
| 22:01 | arbscht | git checkout -b clojure-1.0 origin/clojure-1.0 |
| 22:01 | Chouser__ | wow. Guess I need to read up more on git. |
| 22:02 | Chouser__ | my git-svn habits aren't sufficient. :-) |
| 22:02 | arbscht | heh :) |
| 22:49 | gstamp | Is there a function for replacing the nth element of a collection? |
| 22:58 | gnuvince_ | (doc update-in) |
| 22:58 | clojurebot | "([m [k & ks] f & args]); 'Updates' a value in a nested associative structure, where ks is a sequence of keys and f is a function that will take the old value and any supplied args and return the new value, and returns a new nested structure. If any levels do not exist, hash-maps will be created." |
| 22:58 | gnuvince_ | ,(update-in [1,2,3] [0] inc) |
| 22:58 | clojurebot | [2 2 3] |
| 22:58 | gnuvince_ | ,(update-in [1,2,3] [0] (fn [] 17)) |
| 22:58 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: sandbox$eval--2656$fn |
| 22:58 | gnuvince_ | ,(update-in [1,2,3] [0] (fn [_] 17)) |
| 22:58 | clojurebot | [17 2 3] |
| 22:59 | gnuvince_ | Not terribly sexy I'm afraid |
| 22:59 | gstamp | yeah... should do the job. i'll wrap the non sexyness in a method to hide it. |
| 22:59 | gstamp | thanks |
| 23:00 | gnuvince_ | happy to ablige |
| 23:02 | cark | ,(assoc [0 1 2] 1 :a) |
| 23:02 | clojurebot | [0 :a 2] |
| 23:06 | gstamp | that's nicer. Neither seems to work for sequences though |
| 23:06 | gstamp | lists rather |
| 23:07 | cark | rhikey doesn't like to provide core function doing the work in O(n) |
| 23:07 | cark | maybe check seq-utils ? |
| 23:08 | gstamp | i'll check it out |
| 23:08 | hiredman | ,(let [a '(1 2 3)] (concat (take 1 a) [4] (drop 2 a))) |
| 23:08 | clojurebot | (1 4 3) |
| 23:09 | cark | that's ugly too =P |
| 23:10 | hiredman | it's lazy |
| 23:11 | gstamp | i should probably just ensure I'm always working with a vector |
| 23:11 | cark | yes, use the right data structure for the job |