2009-05-07
| 00:29 | lisppaste8 | eee pasted "ugly transition for 15-puz" at http://paste.lisp.org/display/79806 |
| 00:29 | eee | so here's my ugly function |
| 00:30 | eee | oh, I missed durka42 |
| 00:30 | eee | wondered if there's a better way |
| 00:31 | eee | in imperative language I could add all that apply as I found out they applied |
| 00:33 | eee | think I know one thing to clean it up |
| 00:43 | lisppaste8 | eee annotated #79806 "less ugly?" at http://paste.lisp.org/display/79806#1 |
| 01:10 | eee | i'm stuck again |
| 01:10 | eee | sent a function as arg |
| 01:11 | eee | tried to call function and it says wrong number of argumentd |
| 01:11 | eee | s |
| 01:11 | eee | but I see two being called on it, and two being defined |
| 01:11 | eee | so I probably need some more syntax like hashes somewhere |
| 01:24 | benatkin | anyone know if there's a way to step in between clojure and Java libraries? For example, could I make it so (java.util.Date.) gives me a fixed date instead of the current date? |
| 01:25 | hiredman | why? |
| 01:27 | benatkin | for testing APIs. say I have a function that generates a formatted calendar, and I can give it a month and year, or leave it blank and it will give me the current month and year. I could write a test and make it always return May 2009, and that way I would know what to expect. |
| 02:08 | Lau_of_DK | Morning guys |
| 03:09 | hiredman | ,(+ (mod (/ (.getTime (Date.)) 1000 86.4) 1000) 42) |
| 03:09 | clojurebot | 340.39431712962687 |
| 09:35 | nakyss | motd |
| 10:25 | AWizzArd | stuartsierra: hi |
| 10:25 | stuartsierra | hi |
| 10:26 | AWizzArd | Did you notice the private chat window? |
| 10:43 | lisppaste8 | stuartsierra pasted "fix for partition-by" at http://paste.lisp.org/display/79828 |
| 10:47 | twism | ww... how do i check if a val is an instance of a clojure map? |
| 10:47 | twism | ,(instance? #^Map {}) |
| 10:47 | clojurebot | java.lang.Exception: Unable to resolve symbol: Map in this context |
| 10:48 | rhickey | ,(map? {:a 1}) |
| 10:48 | clojurebot | true |
| 10:48 | twism | thanks rhickey |
| 10:48 | twism | brain freeze |
| 11:02 | konato | hello stuart |
| 11:04 | stuartsierra | hi |
| 11:05 | stuhood | heya |
| 11:05 | konato | i'm the one having difficult with run-tests in emacs |
| 11:06 | konato | i did post a new message on the clojure group. |
| 11:06 | konato | rev 773 still doesn't help me |
| 11:06 | konato | but thank you very much for your help |
| 11:07 | konato | i can still survive since i can tests using REPL in a shell. |
| 11:09 | konato | I really love your test-is framework |
| 11:09 | stuartsierra | Which problem are you still having - the wrong number of arguments to "report"? |
| 11:09 | konato | yes this one |
| 11:11 | konato | I think it's more related to a component with emacs slime-repl... |
| 11:11 | konato | Because, it work in a repl with the shell |
| 11:12 | stuartsierra | I just committed another bug fix to test_is.clj, probably not related. |
| 11:12 | stuartsierra | rev. 774 |
| 11:13 | konato | I'll try it |
| 11:19 | konato | I'm on rev 774 and still got the error: |
| 11:20 | konato | Stuart, I will put the log on Google |
| 11:21 | stuartsierra | I can't reproduce this, so I'm guessing it's something related to your classpath. |
| 11:24 | konato | I will continue to look into, specially the classpath |
| 11:24 | konato | Thanks |
| 11:33 | konato | with vim-clojure how to evaluate a clojure line |
| 11:51 | konato | Hi Stuart, it does work in vim, shell repl but not in emacs. |
| 11:52 | stuartsierra | Got to be the swank-clojure classpath, then. Different versions of contrib. |
| 11:58 | stuhood | has contrib hit 1.0 yet? |
| 11:59 | stuartsierra | it hasn't been discussed much |
| 11:59 | durka42 | should probably tag something to be distributed with core 1.0, no? |
| 12:02 | Chousuke | the libraries in contrib are in varying states of readiness though. |
| 12:02 | replaca | it keeps coming up here, but it's a little problematic since contrib potentially works with multiple clojure revisions |
| 12:02 | Chouser_ | there should still be a branch |
| 12:03 | stuartsierra | in theory, but until core trunk diverges from 1.0, I don't see much need. |
| 12:03 | Chouser | especially ... right |
| 12:03 | replaca | stuartsierra: Hey, as long as you're here, we were noticing some issues in c.c.json.write the other day |
| 12:03 | stuartsierra | hit me |
| 12:04 | Chouser | especially when clojure post-1.0 gets a feature and something in contrib starts to use it. |
| 12:04 | replaca | stuartsierra: where it wasn't writing the right stuff |
| 12:04 | replaca | stuartsierra: I'd have to go reproduce it - it was in the middle of a big file |
| 12:04 | replaca | stuartsierra: also, it never injects newlines |
| 12:04 | stuartsierra | replaca: let me know; I'll need an example, at least |
| 12:04 | stuartsierra | replaca: that's a feature |
| 12:05 | replaca | stuartsierra: so I had a 1/4 MB file on a single line |
| 12:05 | replaca | which seemed odd |
| 12:05 | stuartsierra | I figured, there are loads of JSON pretty-printers, I didn't need to write another one. |
| 12:06 | replaca | I'll go reproduce it, but in the meantime I was wondering if you'd done a compare and contrast with danlarkin's swag at in in clojure-json? |
| 12:06 | stuartsierra | no |
| 12:08 | replaca | ok. It seems like he's done a lot of work on "json-compliance" but I haven't looked at the issue too closely myself |
| 12:08 | stuartsierra | danlarkin's supports arbitrary types |
| 12:08 | stuartsierra | mine doesn't |
| 12:09 | replaca | One of my concerns was whether there was a reason to have two or whether we should focus on one |
| 12:09 | replaca | under the "batteries included" model |
| 12:09 | replaca | (which JSON would seem to be part of nowadays) |
| 12:10 | replaca | but maybe there are good reasons for two that I just don't know |
| 12:10 | danlarkin | stuartsierra: it would be nice if we could bring all the features and "json-compliance" of clojure-json into contrib.json and eliminate the need for clojure-json altogether |
| 12:10 | stuartsierra | I don't really care; I just wanted something fast and simple in contrib. |
| 12:10 | stuartsierra | I tried to follow the spec at www.json.org as closely as possible. |
| 12:11 | replaca | also, I had suggested implementing pretty printing for JSON with c.c.pprint which should be pretty easy and orthogonal |
| 12:11 | replaca | but I in the middle of rewriting the dispatch right now to make it easier to do things like that |
| 12:11 | stuartsierra | seeing how complex c.c.pprint was made me not want to do it in c.c.json |
| 12:12 | replaca | stuartsierra: yeah, the idea is to use the pprint dispatch to print other things and have all that complexity in one place |
| 12:12 | stuartsierra | if you can make that work, go for it. |
| 12:12 | replaca | cause good pretty printing is *hard*! |
| 12:14 | replaca | :-) cool, I think what I'll do is do a fork of clojure-json (since it's standalone) and roll in pprint dispatch then we can all discuss |
| 12:14 | stuartsierra | ok |
| 12:14 | replaca | stuartsierra, danlarkin: thanks |
| 12:14 | danlarkin | sounds good to me |
| 12:15 | replaca | and now back to our regularly scheduled program, "is there a version of contrib for 1.0?" |
| 12:15 | replaca | to be followed at 10AM with today's episode of "git vs. hg: my dvcs is better than yours" |
| 12:15 | kotarak | Wasn't one rev tagged? 753 or something? |
| 12:21 | stuartsierra | nothing in SVN |
| 12:24 | chrizel | hi, I'm doing the "Programming Clojure" example about compile - it uses duck-streams but I'm getting ClassNotFoundException when compiling duck-streams -- what could be the problem? |
| 12:25 | chrizel | contrib is in classpath, it even seems to make a single class file on every compile but aborts with java.lang.RuntimeException: java.lang.ClassNotFoundException: clojure.contrib.duck_streams$file_str__XX |
| 12:28 | stuartsierra | Is the "clojure.compile.path" property set to a directory that is also on the classpath? |
| 12:35 | chrizel | stuartsierra, thank you, clojure-contrib.jar was obviously not compiled with classes |
| 12:37 | kotarak | chrizel: "ant -Dclojure.jar=/path/to/clojure.jar" should compile contrib with AOT compilation. |
| 12:38 | technomancy | dear ant: here's a hint: the path to clojure is _always_ ../clojure/clojure.jar |
| 12:38 | kotarak | technomancy: is that so? |
| 12:39 | replaca | for small values of always |
| 12:39 | replaca | but it would be nice to get all the packaging stuff working so we could know/figure that out |
| 12:40 | chrizel | kotarak, thx, i've figured it out now at least there is no problem with duck-streams anymore -- makes all sense now |
| 12:41 | technomancy | kotarak: it would make a good default value |
| 12:41 | danlarkin | that's the path on my system :) |
| 12:42 | durka42 | i use ../clojure.jar |
| 12:42 | kotarak | replaca: I have posted a patch which adds Ivy support to contrib, since I use it I have no trouble with small (a few kb) jars containing parts of contrib. I got no feedback however. :/ At least not on the list, some positive feedback came via pm. It seems that maven will become the packaging system for Clojure... |
| 12:43 | kotarak | So I use: ant -f build+ivy.xml and don't care where the clojure.jar is... |
| 12:45 | chrizel | Shouldn't it be possible to find the clojure.jar on the classpath automatically? (Java newbie here...) |
| 12:47 | stuartsierra | if it's there, but Ant has its own classpath |
| 12:48 | chrizel | oh, that's right |
| 12:49 | replaca | kotarak: yeah, I've been meaning to get around to looking at that and understanding maven, ivy, etc. But I haven't got there yet... |
| 12:50 | replaca | kotarak: soon, I hope, cause this stuff is important |
| 12:50 | technomancy | replaca: you can take a look at the clojure-pom project on github; it's pretty straightforward: http://github.com/dysinger/clojure-pom |
| 12:50 | replaca | ~seen dnolen |
| 12:50 | clojurebot | dnolen was last seen quiting IRC, 1006 minutes ago |
| 12:51 | technomancy | I'm not a fan of writing XML for stuff like this, but if the XML's written for you it works surprisingly well. |
| 12:51 | replaca | technomancy: cool. I want to look at all this stuff in some depth. I've never done anything with packaging in Java beyond ant |
| 12:52 | technomancy | the ideal solution would be something that could wrap an existing solution like mvn in a syntax that's a little more appealing |
| 12:52 | stuartsierra | As far as Java goes, Maven or Ivy are about the only games in town. Both are very XML heavy. |
| 12:52 | technomancy | if handling deps becomes straightforward, there's less incentive for contrib to be "the great big bucket-'o-code that everyone depends on" |
| 12:52 | stuartsierra | yes |
| 12:53 | technomancy | stuartsierra: luckily generating XML from s-expressions is not in the least bit difficult. =) |
| 12:54 | stuartsierra | Yes, but I expect calling the Java APIs directly will be the more flexible route. |
| 12:54 | dysinger | it would be cool to have a project.clj instead of pom.xml |
| 12:54 | dysinger | and have that just be a wrapper for maven |
| 12:54 | technomancy | yeah, that's probably the best long-term solution. generating XML would be a "let's get it working quickly" hack |
| 12:55 | dysinger | the maven api can be hacked to suck in a pom.xml from memory instead of disk I bet. |
| 12:55 | technomancy | I have a perfect name for a clojure app that generates pom.xml files... |
| 12:55 | technomancy | pomegranate |
| 12:55 | dysinger | I did a project called pomegrante with jruby / maven :) |
| 12:55 | stuartsierra | Take it one step further, call it Persephone. |
| 12:55 | dysinger | where I was doing the same thing |
| 12:56 | dysinger | but eventually I got distracted by buildr and then finally when that didn't work I gave up. |
| 12:56 | dysinger | maven + jruby was teh slow and painful |
| 12:57 | technomancy | stuartsierra: so that means mvn is Hades? |
| 12:57 | stuartsierra | Persephone was (if I recall) the goddess who was trapped in Hades because she ate a pomegranate there. |
| 13:02 | technomancy | ah, gotcha |
| 13:04 | stuartsierra | I thought of calling it "craven". |
| 13:16 | t345 | how do you use classes from -contrib on the repl? |
| 13:17 | replaca | t345: add contrib to your classpath then (use 'clojure.contrib.duck-streams) or whatever |
| 13:17 | cp2 | goose-streams |
| 13:17 | t345 | do I need to do (use) ? |
| 13:17 | t345 | might explaing why it didn't work |
| 13:18 | t345 | looks like clojure.jar's classes are default-use'd |
| 13:18 | replaca | t345: yup |
| 13:18 | replaca | only clojure.core |
| 13:18 | t345 | another one |
| 13:18 | t345 | is it an error in build.xml that not all contrib libs are compiled into the jar? |
| 13:19 | t345 | it's easy to patch, but I didn't want to post a patch that won't be accepted |
| 13:19 | cp2 | contrib is not part of clojure |
| 13:19 | cp2 | thats why it's 'contrib' =p |
| 13:19 | t345 | cp2: into clojure-contrib.jar |
| 13:19 | cp2 | oh |
| 13:19 | t345 | many dirs are omitted fromt he list in build.xml |
| 13:19 | replaca | t345: it is an error, but it doesn't matter too much cause the cljs are all there |
| 13:20 | t345 | yeah but a patch would be accepted. I will create one.... |
| 13:20 | replaca | t345: and clojure will load the cljs as happily as the classes |
| 13:20 | kotarak | ant there are things like miglayout which depend on third party things... |
| 13:20 | kotarak | s/ant/and/ |
| 13:20 | t345 | replaca: pre-compiling still makes sense, doesn't it? |
| 13:20 | technomancy | it'd be great if str-join were in core |
| 13:21 | technomancy | considering you need it to do simple things like reverse a string |
| 13:21 | replaca | t345: yeah, it improves performance |
| 13:21 | t345 | replaca: I will whip up a patch in minute.... |
| 13:21 | t345 | is Google Code the original repo? |
| 13:21 | kotarak | yes |
| 13:21 | t345 | I think so |
| 13:21 | t345 | ok |
| 13:21 | t345 | git svn clone it is then... |
| 13:22 | kotarak | t345: do you have a contributor aggreement sent in? |
| 13:22 | t345 | what? |
| 13:22 | t345 | why? |
| 13:22 | t345 | this is not FSF or Sun |
| 13:22 | t345 | or Apache |
| 13:22 | t345 | or eclipse |
| 13:22 | kotarak | Do contribute patches you have to sign a contributor agreement. |
| 13:22 | kotarak | s/Do/To/ |
| 13:23 | t345 | I will use Scala, then, thanks |
| 13:23 | kotarak | http://clojure.org/contributing IIRC. |
| 13:23 | t345 | CRAZY |
| 13:23 | t345 | might make sense |
| 13:23 | t345 | but too much effort |
| 13:24 | Chousuke | :p |
| 13:24 | technomancy | barriers to contribution are no fun |
| 13:24 | kotarak | Was one sheet of paper and an envelope... |
| 13:24 | t345 | it's just a simple build.xml diff |
| 13:24 | rsynnott | 6apart keeps nagging me about sending in one of those |
| 13:24 | gnuvince | technomancy: I imagine tracking down ownership 7 years from now is even less fun. |
| 13:24 | technomancy | IIRC the reason Sun and FSF require one is so that they can use their considerable legal resources to defend the project. but that doesn't even apply here. |
| 13:24 | rsynnott | they're not that often seen on non-company-controlled projects |
| 13:25 | t345 | Signed-Off-By was Ok for my git and kernel patches |
| 13:25 | t345 | hmm |
| 13:27 | t345 | can't I just send the patch to a dev and he will also sign-it off and it's ok? |
| 13:27 | t345 | it's non-substantial plumbing |
| 13:27 | Chousuke | I don't think that works :/ |
| 13:27 | Chousuke | the CA thing is a nuisance sometimes |
| 13:27 | rsynnott | ah, but then you'd have to assign copyright to HIM |
| 13:27 | rsynnott | see how this works? :) |
| 13:28 | technomancy | t345: it's not about making sure it is good code, it's about who owns the copyright. |
| 13:28 | t345 | copyright for build.xml? come on |
| 13:28 | technomancy | =( |
| 13:28 | replaca | t345: or you can just ask a dev to fix it - we don't really need a patch on this one |
| 13:28 | Chousuke | t345: go complain to legislators :P |
| 13:28 | replaca | I've had it on my list for a few weeks (since I noticed it) but it hasn't gotten to the top |
| 13:28 | Chousuke | t345: copyright even applies to what we write *here* |
| 13:28 | t345 | ok then please make sure that everything that's compilable is compiled via build.xml. |
| 13:29 | t345 | replaca: I will send you a scret diff and you will not mention who wrote it :D |
| 13:29 | replaca | you got it! |
| 13:29 | replaca | gotta run - talk to you all later |
| 13:32 | Chousuke | I suppose it'd be possible to drop the requirement for a CA in the future, but that's up to Rich. |
| 13:33 | t345 | where is rich? |
| 13:33 | gnuvince | NYC |
| 13:33 | rhickey | what's the question? |
| 13:33 | t345 | hey |
| 13:34 | kotarak | clojurebot: bat light |
| 13:34 | clojurebot | No entiendo |
| 13:34 | t345 | rhickey: is it Ok to submit a trivial build.xml patch without signing the postal mail agreement? |
| 13:34 | rhickey | t345: no |
| 13:34 | technomancy | according to the FSF, anything under ~5 LOC is probably not subject to copyright to begin with |
| 13:35 | rhickey | why not send in a CA? |
| 13:35 | Chousuke | "probably" is not very assuring :/ |
| 13:35 | danlarkin | everything created in the USA is automatically copyright it's creator, no matter the size or scope |
| 13:35 | danlarkin | that sentence is copyright me |
| 13:35 | t345 | too much hassle for something trivial and non-substantial non-clojure code |
| 13:36 | kotarak | In Germany you can't give up your copyright. No public domain here... |
| 13:36 | t345 | it's much more work to discuss this actually |
| 13:36 | t345 | :) |
| 13:36 | technomancy | Chousuke: even if it is, if it's trivial to reimplement, then there's no danger of it becoming a legal issue in the future. |
| 13:36 | rhickey | t345: true, then you can just 'suggest' the change on the group |
| 13:36 | technomancy | I think that's the FSF's reasoning at least; they let me send in trivial patches before my paperwork had gone through. |
| 13:37 | t345 | rhickey: with a "this is what I mean" diff? or literal explanation? |
| 13:37 | technomancy | danlarkin: sure, but you'd have a hard time defending your copyright on a five-word sentence. |
| 13:37 | t345 | rhickey: I am used to posting patches instead of explaining something which looks like a whishlist |
| 13:38 | rhickey | t345: sending in a CA is a one-time thing, if you think you'll have multiple patches that's the way to go |
| 13:38 | danlarkin | technomancy: correct, especially messages posted to a public forum like this, almost any use would be fair use. The point is that legally, I owned the copyright as soon as typed the keys |
| 13:38 | t345 | I will do that if I ever need to change a .clj or .java file, promised |
| 13:39 | rhickey | no one person's convenience is more important than the project having sound stewardship and provenance |
| 13:40 | Chousuke | t345: so what library in contrib is not getting compiled by default? :/ |
| 13:40 | t345 | before we discuss too long |
| 13:40 | t345 | at least json.* |
| 13:40 | t345 | let me try if that helps at all with my repl classnotfound errors.... |
| 13:41 | technomancy | danlarkin: yeah, I think you're right about that, but the end result is the same as it applies to this project. |
| 13:44 | t345 | hmm (use 'clojure.contrib.json.read) still yields nil |
| 13:44 | t345 | oh wait |
| 13:44 | Chousuke | that's what it should do |
| 13:44 | kotarak | It's supposed to yield nil |
| 13:44 | t345 | ok |
| 13:45 | t345 | ok, class is found |
| 13:45 | t345 | so the compiling was the problem |
| 13:45 | t345 | anyway, it's ok for me and I trust yhat you guys will fix build.xml for all cases where it's missing |
| 13:45 | t345 | thanks for talk :D |
| 13:45 | t345 | it's appreciated |
| 13:48 | t345 | and yes if I ever want to contribute to Clojure-Contrib I will read the agreement and if it's sound will send it in but first have to make some money to pay for the postal service :P |
| 13:50 | t345 | hmm, no single reply, I've made you guys ignore me. cool. |
| 13:51 | technomancy | t345: send me your address; I'll send you a stamp. =) |
| 13:51 | t345 | :D |
| 13:51 | t345 | from the first sentence in ca.pdf I am not sure I even agree or am fine to sign it |
| 13:52 | t345 | no time to think about it |
| 14:04 | Chousuke | there are surprisingly many libraries that don't get compiled :/ |
| 14:04 | Chousuke | probably from before there was AOT compilation : |
| 14:35 | cp2 | hehe http://gianturl.com/ |
| 14:35 | cp2 | novel idea |
| 14:35 | cp2 | wish i came up with it |
| 14:36 | technomancy | what's the status on making regexes callable? |
| 14:36 | technomancy | I noticed it's on the todo |
| 14:37 | rhickey | technomancy: there are some problems with the idea, it seems like we can have callable regexes or Pattern-compatible regexes, and the latter is more useful |
| 14:37 | kotarak | cp2: http://dickensurl.com/ |
| 14:37 | cp2 | haha |
| 14:37 | cp2 | neat |
| 14:38 | technomancy | rhickey: you mean making it so #"foo" isn't a native Java type? |
| 14:39 | technomancy | but still uses the same syntax? |
| 14:39 | rhickey | technomancy: that would be the tradeoff |
| 14:40 | stuhood | it isn't until you build a language on the JVM that you start noticing all the final classes |
| 14:41 | stuhood | is that because the implementation is actually native to the JVM implementation? |
| 14:41 | technomancy | it's tempting to think about hacking the JVM to just ignore "final" declarations. |
| 14:41 | technomancy | who needs 'em anyway? =P |
| 14:41 | Chouser | how useful is a Pattern regex compared to a callable regex that provides all the same methods as Pattern? |
| 14:42 | technomancy | Chouser: seems like the only advantage is that there's less overhead |
| 14:42 | technomancy | but maybe I'm missing something |
| 14:42 | rhickey | Chouser: it's very useful in APIs that take Patterns |
| 14:42 | stuhood | i don't know: this seems ackward: (#"matchme" "matchme")... would it execute a 'find' or a 'match'? |
| 14:43 | Chouser | The place I've most often wanted to pass in an actual Pattern is to String's .split() method -- but it doesn't take Patterns at all, only regexes in Strings. :-P |
| 14:43 | Chouser | stuhood: that's the next question. :-) |
| 14:43 | stuhood | Chouser: you can do Pattern/split |
| 14:44 | Chouser | stuhood: sure. and thus also could do ClojureRegex/split |
| 14:44 | stuhood | true... |
| 14:44 | Chouser | I think calling a ClojureRegex should be the same as re-seq |
| 14:44 | stuhood | yea, i don't know how often patterns cross API boundries |
| 14:47 | rhickey | The group would be a good place to feel out how many people care that #"regexes" are Patterns |
| 14:47 | stuhood | rhickey: which APIs have you seen Patterns passed around in? |
| 14:48 | technomancy | as long as there's a convenient way to get the Pattern from a #"regex", it seems like a step forward |
| 14:48 | Chouser | I'd love to see an concise s-expr alternative to regex. |
| 14:48 | stuhood | what is the benefit, aside from becoming callable? that really only eliminates 5 characters from the call |
| 14:50 | technomancy | stuhood: yeah, and callable maps "only" eliminate four characters vs using "get", but it's a huge win. |
| 14:50 | stuhood | "huge"... |
| 14:50 | Chouser | it means you can pass around the object rather than a thunk |
| 14:54 | danlarkin | well I am in favor of the idea... but passing a thunk versus non-thunk is not an issue if the callee can use them the same way |
| 15:02 | drewr | I wonder if scsh has a sexp-based pattern system. |
| 15:03 | drewr | Sounds like something it would do. |
| 15:03 | kotarak | drewr: it has, IIRC |
| 15:19 | chrizel | Does someone know how to solve Emacs+Slime+clojure-mode problems with stdout in other Java threads? (e.g. when an ActionListener in Swing does println, nothing gets printed in the Emacs window but in an external repl it works without a problem) |
| 15:28 | tashafa | what ever happened to 'recur' |
| 15:29 | tashafa | ,doc recur |
| 15:29 | clojurebot | java.lang.Exception: Can't take value of a macro: #'clojure.core/doc |
| 15:29 | tashafa | ,(find-doc recur) |
| 15:29 | clojurebot | java.lang.Exception: Unable to resolve symbol: recur in this context |
| 15:29 | dliebke | ,(doc recur) |
| 15:29 | clojurebot | java.lang.Exception: Unable to resolve var: recur in this context |
| 15:29 | dliebke | hmm |
| 15:30 | replaca | dliebke: recur is special |
| 15:30 | dliebke | yeah, but I can run (doc recur) on my system without an exception |
| 15:30 | stuhood | http://clojure.org/special_forms#toc10 |
| 15:32 | replaca | dliebke: and it tells me it's special :). You'll have to ask hiredman why clojurebot has a prob with it |
| 15:32 | dliebke | yep, it just says, Please see http://clojure.org/special_forms#recur |
| 15:33 | replaca | ,(find-doc "recur") |
| 15:33 | clojurebot | ------------------------- clojure.core/loop ([bindings & body]) Macro Evaluates the exprs in a lexical context in which the symbols in the binding-forms are bound to their respective init-exprs or parts therein. Acts as a recur target. ------------------------- clojure.core/trampoline ([f] [f & args]) trampoline can be used to convert algorithms requiring mutual recursion without stack consumption. Calls f with |
| 15:34 | replaca | tashafa: find-doc takes a string |
| 15:34 | hiredman | ,(doc recur) |
| 15:34 | clojurebot | java.lang.Exception: Unable to resolve var: recur in this context |
| 15:34 | hiredman | *shrug* |
| 15:39 | hiredman | ,(doc if) |
| 15:39 | clojurebot | "([tst & etc]); " |
| 15:39 | hiredman | ,(doc if*) |
| 15:39 | clojurebot | java.lang.Exception: Unable to resolve var: if* in this context |
| 15:39 | hiredman | (if*) |
| 15:39 | hiredman | ,(if* nil 1 2) |
| 15:39 | clojurebot | 2 |
| 15:40 | cp2 | hrm? |
| 15:40 | hiredman | clojurebot's doc lookup doesn't handle special forms |
| 15:40 | hiredman | (I guess) |
| 15:41 | tashafa | replaca: thanks |
| 15:41 | Chousuke | ~source if |
| 15:42 | Chousuke | ah, right, the lazy seq thing. |
| 15:42 | hiredman | Yeah |
| 15:49 | replaca | hiredman: can you do source straight into contrib now? |
| 15:51 | hiredman | replaca: I, uh, no |
| 15:51 | replaca | :-) |
| 15:52 | replaca | hiredman: `any blockers or just hasn't gotten to the top of the list? |
| 15:53 | hiredman | no blockers, just got pushed back |
| 15:53 | replaca | ok |
| 16:00 | cemerick | has anyone seen a couchdb wrapper yet? |
| 16:01 | danlarkin | cemerick: I have started one |
| 16:01 | replaca | danlarkin: make sure it has lots of pron! |
| 16:02 | danlarkin | d'oh, I knew it was missing something |
| 16:03 | replaca | danlarkin: if it's good for Ruby, Clojure should have it too |
| 16:03 | cemerick | danlarkin: we're thinking of using couchdb. if/when you've got something on github, we'll be happy to bang on it. Which java driver are you wrapping? |
| 16:04 | danlarkin | cemerick: no java driver, just using clojure-http-client (which hopefully soon becomes clojure.contrib.http.client) |
| 16:05 | jwinter | this one? http://github.com/technomancy/clojure-http-client/tree/master |
| 16:06 | danlarkin | jwinter: yes |
| 16:22 | hiredman | ~def file |
| 16:22 | hiredman | is there a function with the same name in multiple contrib namespaces? |
| 16:24 | kotarak | I think, one was renamed to file-str. |
| 16:24 | kotarak | maybe duck-streams and java-utils? |
| 16:25 | hiredman | I am just looking for a function with the same name so I can see how it looks when clojurebot encounters it |
| 16:25 | hiredman | it should just give multiple urls, but I would like to test it |
| 16:27 | kotarak | Isn't there also something in clojure.set? replace or something? I vaguely remember some clash there... |
| 16:27 | durka42 | ~def next |
| 16:28 | durka42 | ~defn zip/next |
| 16:28 | clojurebot | I don't understand. |
| 16:28 | durka42 | ~def zip/next |
| 16:28 | durka42 | ~def clojure.zip/next |
| 16:29 | hiredman | well thats not contrib |
| 16:30 | durka42 | true |
| 16:32 | hiredman | but anyway, clojurebot does contrib source lookups now |
| 16:32 | hiredman | ~def add |
| 17:02 | hoeck | chrizel: regarding your slime-thread-printing problem, its solveable by binding *out* in each thread to the value of *out* slime uses |
| 17:02 | hoeck | chrizel: or use a custom println function |
| 17:02 | lisppaste8 | hoeck pasted "slime-println" at http://paste.lisp.org/display/79852 |
| 17:03 | kotarak | hoeck: Hi. I pushed the changes to the lazymap repo. Since I had to do some changes you will get a new head when pulling... |
| 17:03 | benatkin | ~def import |
| 17:04 | hoeck | kotarak: well, now I know that there is a rebase command :) |
| 17:04 | kotarak | hoeck: :) I'm not sure it helps in this case. ;) |
| 17:08 | chrizel | hoeck, thanks |
| 17:18 | kotarak | ,(doc repeatedly) |
| 17:18 | clojurebot | "([f]); Takes a function of no args, presumably with side effects, and returns an infinite lazy sequence of calls to it" |
| 17:26 | replaca | ~def pprint |
| 17:26 | replaca | hiredman: nice! |
| 17:32 | replaca | def ~conj |
| 17:32 | replaca | ~def conj |
| 17:33 | technomancy | o O ( google code doesn't support syntax highlighting on clojure, but github does? ) |
| 17:34 | replaca | hiredman: there aren't any dups in contrib (from my quick scan) but there are some funcs (in generic.collections) that "override" core funcs |
| 17:34 | replaca | hiredman: like conj above |
| 17:35 | hiredman | right now I have it fallback, if it cannot find a symbol in core, look in contrib |
| 17:36 | replaca | hiredman: makes sense - the contrib version might just confuse folks |
| 18:15 | replaca | hiredman: another idea: maybe for contrib you should prefix the var with the ns and then we could look at contrib in addition to core and it would be "obvious" |
| 18:16 | hiredman | possible |
| 18:17 | hiredman | I don't want to touch the source lookup stuff anymore unless I set aside time to refactor |
| 18:17 | replaca | easy for me to say! :-) |
| 18:23 | eyeris | I think I've configured clojure-mode and swank-clojure properly, but I must have made a mistake because I am not getting syntax coloring. Could someone take a look at my .emacs file? (I am super new to emacs) http://pastebin.ca/1415781 |
| 18:23 | eyeris | clojure-mode.el is in my .emacs.d. This is emacs 23 |
| 18:24 | ctdean | If you say M-x font-lock-mode in a .clj buffer, what happens? |
| 18:25 | eyeris | It says Font-Lock mode disabled |
| 18:25 | eyeris | Doing it again enables. |
| 18:25 | ctdean | cool, at least that is working right |
| 18:26 | technomancy | eyeris: if you're new to Emacs I'd recommend using the Emacs Starter Kit, installing clojure-mode via ELPA, and then using M-x clojure-install |
| 18:26 | technomancy | that should handle all the tricky bits for you |
| 18:27 | eyeris | I tried using clojure-install last night. I thought it worked when I was using emacs-gtk but now I am working remotely, over a text terminal. |
| 18:28 | technomancy | eyeris: clojure-install will set up communication with a clojure subprocess; it doesn't affect things like syntax highlighting |
| 18:28 | technomancy | that's just clojure-mode by itself |
| 18:28 | eyeris | Okay, well then clojure-install won't help me because I want clojure-mode to give me highlighting |
| 18:29 | eyeris | I don't know what this ELPA is. |
| 18:29 | technomancy | eyeris: ELPA is a package manager for elisp |
| 18:30 | technomancy | eyeris: what does M-: major-mode RET show in the minibuffer if you do it from your .clj file? |
| 18:31 | eyeris | fundamental-mode |
| 18:32 | ctdean | well, that's not right |
| 18:33 | ctdean | Try M-x clojure-mode |
| 18:33 | eyeris | I just used the ELPA to install it and now it works. |
| 18:33 | ctdean | great! |
| 18:34 | eyeris | Is there a way to make the M-x buffer history persist between executions? |
| 18:35 | ctdean | Don't know |
| 18:35 | technomancy | eyeris: probably; you could search emacswiki.org |
| 18:36 | technomancy | in general it's not that helpful if you've got Emacs sessions that last weeks |
| 18:43 | eyeris | quit |
| 19:04 | technomancy | hiredman: there's a third clojure user in Seattle now. exciting times. |
| 19:39 | eee | i have, maybe, a weird question: is there a way to make something equal nothing? |
| 19:39 | eee | what I mean |
| 19:39 | eee | is |
| 19:39 | eee | [nil 'a] |
| 19:39 | eee | ,[nil 'a] |
| 19:39 | clojurebot | [nil a] |
| 19:39 | eee | isn't quite right |
| 19:39 | danlarkin | whoah, another clojure user in Albany... small world! |
| 19:40 | eee | i want to say that under some condition, a variable is nothing |
| 19:40 | eee | then when you do [nothing a] .... you get [a] |
| 19:41 | eee | same as if you concat "" to "hello world", you get "hello world" |
| 19:41 | eee | ,[,'() 'a] |
| 19:41 | clojurebot | [() a] |
| 19:41 | danlarkin | eee: no |
| 19:41 | technomancy | eee: you could use binding on =, but that would break things horribly |
| 19:42 | ctdean_ | You want to pass two arguments to a vector and have it the size of the vector be 1? |
| 19:42 | hiredman | eee: use if |
| 19:42 | hiredman | (if a (conj b a) b) |
| 19:43 | eee | i want to say, "let foo equal (if such and such [adfasdf] else nothing)" |
| 19:43 | hiredman | ,(let [a nil b [1]] (if a (conj b a) b)) |
| 19:43 | clojurebot | [1] |
| 19:43 | hiredman | ,(let [a 2 b [1]] (if a (conj b a) b)) |
| 19:43 | clojurebot | [1 2] |
| 19:44 | hiredman | nil is nothing |
| 19:44 | hiredman | well |
| 19:44 | lisppaste8 | eee pasted "need to check previous state in history" at http://paste.lisp.org/display/79862 |
| 19:44 | hiredman | nil has the semantics of "nothing" if you ever want "nothing" to be useful |
| 19:45 | eee | my problem |
| 19:46 | eee | is that my history gets previous transitions |
| 19:46 | eee | added again |
| 19:46 | eee | I only want option1, say, if I the history doesn't already have option1 |
| 19:47 | eee | i could put the if statements all over the place below the let, too |
| 19:47 | hiredman | (if (-> history (.conatins option1)) ... |
| 19:48 | eee | ahh |
| 19:48 | eee | actually (first option1) |
| 19:49 | eee | since option1 is a new history |
| 19:49 | eee | option1 and option3 are alternative realities |
| 19:49 | eee | of the whole new history |
| 19:49 | eee | after the transition |
| 19:49 | hiredman | (if (-> history first (.conatins option1)) ... |
| 19:50 | eee | (if (-> history (.conatins first(option1))) |
| 19:50 | eee | not that? |
| 19:51 | eee | so in the case statements |
| 19:52 | eee | where I have [option1 option3] |
| 19:53 | eee | i'd have [(if ..... option1 ()) [(if ......] |
| 19:53 | eee | and I'd have the same problem |
| 19:53 | eee | the possibility of having |
| 19:53 | eee | [nil nil] |
| 19:53 | eee | or at least |
| 19:53 | eee | [nil aasdfasdf] |
| 19:53 | eee | so then i'd need to stop out all the nills |
| 19:54 | eee | nils |
| 19:54 | eee | ahhhh filter |
| 19:54 | eee | ,(filter #(= nil %1) [nil]) |
| 19:54 | clojurebot | (nil) |
| 19:55 | eee | ,(filter #(not= nil %1) [nil]) |
| 19:55 | clojurebot | () |
| 19:55 | eee | cool |
| 19:55 | eee | opposite of filter? |
| 19:59 | eee | (doc keep) |
| 19:59 | clojurebot | I don't understand. |
| 20:00 | durka42 | i believe #(not= nil %1) is identity |
| 20:00 | durka42 | and the opposite of (filter whatever coll) is (filter (complement whatever) coll) |
| 20:00 | eee | i've seen it |
| 20:01 | eee | someone has, like 'keep or somthing |
| 20:01 | durka42 | maybe something in seq-utils? |
| 20:02 | durka42 | apparently not |
| 20:02 | Chousuke | or (remove whatever coll)? |
| 20:02 | eee | that'd be cool, too |
| 20:03 | Chousuke | ,(remove identity [nil 1 2 3 nil]) |
| 20:03 | clojurebot | (nil nil) |
| 20:03 | eee | ,(remove nil [nil 5 6 nil 7]) |
| 20:03 | clojurebot | java.lang.NullPointerException |
| 20:03 | Chousuke | hmm |
| 20:03 | Chousuke | opposite of what I wnated |
| 20:03 | eee | ,(remove 'nil [nil 5 6 nil 7]) |
| 20:03 | clojurebot | java.lang.NullPointerException |
| 20:03 | Chousuke | ,(remove nil? [nil 1 2 3 nil]) |
| 20:03 | clojurebot | (1 2 3) |
| 20:03 | Chousuke | eee: it must be a predicate |
| 20:03 | eee | ,(remove nil? [nil 5 6 nil 7]) |
| 20:03 | clojurebot | (5 6 7) |
| 20:03 | eee | sweet |
| 20:03 | Chousuke | :) |
| 20:04 | eee | :) |
| 20:05 | Chousuke | ,(= 'nil nil); hmm |
| 20:05 | clojurebot | true |
| 20:06 | eee | i found an old conversation in here where you guys already told me 'compliment' |
| 20:06 | Chousuke | ,(symbol "nil") ; this would fool people |
| 20:06 | clojurebot | nil |
| 20:06 | eee | i don't even remember, but google does |
| 20:06 | eee | sorry to rehash |
| 20:06 | Chousuke | don't worry. |
| 20:06 | Chousuke | I forgot complement exists, too |
| 20:07 | eee | ,(remove-if #(nil? %1) [nil 5 6 nil 7]) |
| 20:07 | clojurebot | java.lang.Exception: Unable to resolve symbol: remove-if in this context |
| 20:07 | Chousuke | it's just remove :) |
| 20:08 | Chousuke | also #(nil? %1) == nil? |
| 20:11 | Chousuke | reminds me... I had to code a bit of perl earlier, and it was quite painful. |
| 20:11 | Chousuke | I haven't used perl before, and I kept trying to do clojurey things |
| 20:12 | Chousuke | perl has map and such but it's... weird. |
| 20:14 | eee | ,(remove nil? [nil 5 6 nil 7]) |
| 20:14 | clojurebot | (5 6 7) |
| 20:14 | eee | dang turned into a list |
| 20:14 | Chousuke | a seq |
| 20:14 | gnuvince_ | seq |
| 20:14 | Chousuke | it's lazy |
| 20:14 | eee | ,(vector (remove nil? [nil 5 6 nil 7])) |
| 20:14 | clojurebot | [(5 6 7)] |
| 20:14 | eee | dang |
| 20:14 | gnuvince_ | vec |
| 20:14 | Chousuke | (into [] (remove nil? [nil 3 4 nil])); not lazy |
| 20:15 | gnuvince_ | ,(vec (remove nil? [nil 5 6 nil 7])) |
| 20:15 | clojurebot | [5 6 7] |
| 20:15 | eee | ,(into [] (remove nil? [nil 5 6 nil 7])) |
| 20:15 | Chousuke | ,(into [] (remove nil? [nil 3 4 nil])); I am lazy |
| 20:15 | clojurebot | [3 4] |
| 20:15 | clojurebot | [5 6 7] |
| 20:15 | Chousuke | I think into [] looks nicer than "vec" |
| 20:15 | Chousuke | I wonder if they perform the same too |
| 20:16 | eee | vec is right but vector is wrong |
| 20:16 | eee | wow |
| 20:16 | Chousuke | vec is short for apply vector |
| 20:16 | gnuvince_ | vec turns a seq into a vector |
| 20:16 | eee | i would agree that into [] is more descriptive |
| 20:16 | gnuvince_ | vector takes its arguments and yields a vector |
| 20:17 | eee | and self documenting etc |
| 20:17 | Chousuke | ,(time (dotimes [i 100000] (into [] (take 100 (iterate inc 0)))) |
| 20:17 | clojurebot | EOF while reading |
| 20:17 | Chousuke | ,(time (dotimes [i 100000] (into [] (take 100 (iterate inc 0))))) |
| 20:17 | Chousuke | hmm |
| 20:18 | clojurebot | Execution Timed Out |
| 20:18 | Chousuke | too much :( |
| 20:18 | Chousuke | ,(time (dotimes [i 10000] (into [] (take 100 (iterate inc 0))))) |
| 20:18 | clojurebot | "Elapsed time: 843.441 msecs" |
| 20:18 | Chousuke | ,(time (dotimes [i 10000] (vec (take 100 (iterate inc 0))))) |
| 20:18 | clojurebot | "Elapsed time: 651.112 msecs" |
| 20:19 | durka42 | it looks like vec punts to java so that isn't so surprising |
| 20:19 | lisppaste8 | eee pasted "train wreck transition function" at http://paste.lisp.org/display/79866 |
| 20:20 | eee | doesn't work now |
| 20:20 | eee | error |
| 20:20 | durka42 | .contains |
| 20:21 | eee | it's there |
| 20:21 | Chousuke | it says conatins in the code :p |
| 20:21 | eee | oh |
| 20:21 | eee | i'll search |
| 20:21 | eee | cause that's the error, too |
| 20:21 | eee | ! |
| 20:22 | eee | duh |
| 20:25 | eee | in some environments that people have, can you actually step though the code and also stop where breaks occur like in common lisp? |
| 20:25 | eee | cause I gotta null ptr ex somewhere |
| 20:26 | eee | i wonder ... |
| 20:27 | eee | ,(-> [] (.contains 'a) |
| 20:27 | clojurebot | EOF while reading |
| 20:27 | eee | ,(-> [] (.contains 'a)) |
| 20:27 | clojurebot | false |
| 20:28 | eee | ,(-> [a] (.contains [])) |
| 20:28 | clojurebot | java.lang.Exception: Unable to resolve symbol: a in this context |
| 20:28 | eee | ,(-> ['a] (.contains [])) |
| 20:28 | clojurebot | false |
| 20:30 | durka42 | eee: i don't know about stepping through (maybe a java debugger) but you can easily get stacktraces |
| 20:32 | eee | i gotta run in some other environment I think |
| 20:32 | eee | clojure-dev ain't got that |
| 20:34 | Raynes | Clojure-dev still doesn't have autoidentation :\ |
| 20:35 | eee | true |
| 20:35 | eee | but color parens is nice |
| 20:35 | durka42 | vimclojure does :) |
| 20:36 | eee | i never got all the vay to setting that up |
| 20:36 | eee | i like vim |
| 20:37 | eee | i use a somewhat old mac with tigre |
| 20:37 | eee | tiger |
| 20:37 | eee | and a broken "port" configuration |
| 20:37 | durka42 | heh |
| 20:37 | durka42 | i use vimclojure with macvim |
| 20:37 | eee | and vim does have the stack trace? |
| 20:38 | clojurebot | Gesundheit! |
| 20:38 | eee | is yours tiger? |
| 20:38 | durka42 | em |
| 20:38 | durka42 | leopard i think |
| 20:38 | durka42 | 10.5 is leopard, yes? |
| 20:38 | durka42 | you can have stacktraces anywhere |
| 20:38 | eee | ye |
| 20:38 | eee | so i can't get it |
| 20:38 | durka42 | the repl binds *e to the last exception, like *1 |
| 20:38 | eee | from you |
| 20:39 | eee | nice |
| 20:39 | eee | guess I'll work on that |
| 20:39 | durka42 | also contrib.stacktrace |
| 20:39 | eee | ok |
| 20:40 | eee | guess i gotta go for a few |
| 20:40 | eee | thanks for the help, as always |
| 20:49 | eee | found problem |
| 20:50 | eee | if result was swapped with else |
| 20:50 | eee | or contains logic backwards |
| 20:50 | eee | :) |
| 21:04 | eee | i just realized how to parallelize this a-star search |
| 21:41 | Victorr | hi, does clojure read some .file in the home directory by default? |
| 21:42 | Victorr | I'm looking for a place to put some handy repl functions... |
| 21:44 | dliebke_ | it looks for files on the classpath |
| 21:45 | Victorr | dliebke_, I want clojure to automatically (use) this file |
| 21:45 | eee | the (use) thing is at the clojure level but |
| 21:46 | eee | the way I look at it |
| 21:46 | eee | clojure is a java program |
| 21:46 | eee | or at least a jvm program |
| 21:46 | eee | a universe inside a universe |
| 21:47 | eee | so (use) is in the inner universe. but that universe has a classpath |
| 21:47 | dliebke_ | you can create a user.clj that will be called automatically when the repl starts up |
| 21:47 | eee | oh I see |
| 21:47 | eee | interesting |
| 21:48 | Victorr | that is what I need, will it get loaded if it is in the classpath, or do I need to put it somewhere |
| 21:48 | dliebke_ | it just needs to be on the classpath |
| 21:48 | Victorr | thanks dliebke_! |
| 21:54 | Victorr | dliebke_, user.clj works when I launch the repl from the command line, but not from slime, would you happen to know how to make it work? |
| 21:54 | dliebke_ | unfortunately, I don't use slime. sorry :( |
| 21:55 | Victorr | np, thanks |
| 22:27 | memoize | what's the difference between cons and list* ? |
| 22:27 | stuhood | ,(doc list*) |
| 22:27 | clojurebot | "([item & more]); Creates a new list containing the item prepended to more." |
| 22:28 | stuhood | ,(doc cons) |
| 22:28 | clojurebot | "([x seq]); Returns a new seq where x is the first element and seq is the rest." |
| 22:28 | stuhood | list versus sequence... |
| 22:28 | memoize | oh! |
| 22:28 | stuhood | they both probably implement the same java interfaces, but they have different base classes |
| 22:28 | memoize | too subtle for me right now |
| 22:29 | stuhood | ASeq vs PersistentList |
| 22:30 | memoize | (cons 1 [2]) and (list* 1 [2]) return a Cons object, when I use (class) on them |
| 22:34 | memoize | list* is cons passed to a private function spread; i'm not sure what spread does |
| 22:35 | durka42 | ~def clojure.core/spread |
| 22:35 | durka42 | it looks like it walks the list re-consing it |
| 22:38 | memoize | when would i use list* over cons? i'll look at how core uses list* |
| 22:39 | durka42 | i think the functions ending in * are generally not intended to be used at all |
| 22:40 | memoize | i'll take that advice and move on, thanks |
| 22:41 | durka42 | it seems like core only uses it before things that would avoid are defined |
| 22:41 | durka42 | but i don't know my way around core |
| 22:49 | Victorr | ,(list* 1 2 [3]) |
| 22:49 | clojurebot | (1 2 3) |
| 22:49 | Victorr | memoize, that is the difference between it and cons |
| 22:49 | Victorr | ,(cons 1 2 [3]) |
| 22:49 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: core$cons |
| 22:50 | Victorr | durka42, I'm not sure about your comment that "functions ending in * are generally not intended to be used at all" |
| 22:50 | Victorr | for some functions, it means something akin to "act on many" (or at least it does for Scheme) |
| 22:51 | durka42 | well, thinks like fn* and if* that are even more special than special forms |
| 22:51 | durka42 | in scheme and CL, i agree, but i don't think it's a common naming scheme in clojure |
| 22:51 | Victorr | ,(doc if*) |
| 22:51 | clojurebot | java.lang.Exception: Unable to resolve var: if* in this context |
| 22:52 | Victorr | ok, but list* at least seems to follow that rule |
| 22:56 | hiredman | generally let* is a special form and let is a macro that uses let* |
| 22:57 | memoize | Victorr: thanks, i didnt read the functional sigs carefully |
| 23:04 | Victorr | memoize, glad to be of help. In general, I find that the docs for functions suck |
| 23:06 | Victorr | I wonder if Rich requires a licensing agreement before sending patches for documentation.. |
| 23:08 | memoize | im going through core, grouping functions, distinguishing when to use this or that, giving practical examples |
| 23:08 | memoize | Victorr: docs be part of the code, so yeah |
| 23:18 | durka42 | memoize: that sounds very useful |
| 23:18 | durka42 | see also: |
| 23:18 | durka42 | ~examples |
| 23:18 | clojurebot | examples is http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples |
| 23:26 | Victorr | memoize, that looks very good. I think it would be even more useful if it was part of the documentation of functions in the source code. If you want to do that, I would be happy to help |
| 23:27 | Drakeson` | is there a book on clojure that does not assume you already know java? |
| 23:30 | hiredman | java is not that hard to pick up, knowing some is good because you will want to wade through javadocs |
| 23:33 | Drakeson | hiredman: I happen to know some lisp, so it is irritating to "think in java". I guess it would be great if there is a book/document that starts by assuming no knowledge of java. |
| 23:34 | Drakeson | many people don't know java, afterall |
| 23:36 | hiredman | if thinking in java is not something you want to do, then don't |
| 23:37 | hiredman | but learn a little java |
| 23:39 | Drakeson | Is it possible to teach someone clojure as their _first_ programming language? |
| 23:39 | Drakeson | (that's what I want to try to do) |
| 23:39 | hiredman | sure |
| 23:41 | danlarkin | I always thought lisp would make a great first programming language |
| 23:41 | hiredman | yeah |
| 23:41 | hiredman | I mean lisp + functional = super simple |
| 23:41 | danlarkin | totally |
| 23:42 | Drakeson | danlarkin: you are not the only one :) scheme had been tought as the first prog lang in MIT for ages. |
| 23:42 | hiredman | but clojure has a lot of rather advanced features that, uh, would not go over well with a new programmer |
| 23:42 | hiredman | all that emphasis on concurrency |
| 23:43 | Drakeson | hiredman: that's simple. You don't go over advanced features when you teach to a new pupil. |
| 23:43 | durka42 | yeah you can leave those out for a while |
| 23:43 | durka42 | and then, BAM! look at pmap |
| 23:44 | Drakeson | You can always see how much they can grasp, and slow down or speed up accordingly. |
| 23:45 | Drakeson | Now my question: Is there a Clojure book suited for "programming newbies"? |
| 23:45 | hiredman | there is only one clojure book |
| 23:45 | hiredman | there will be more in the future |
| 23:45 | hiredman | but now there is only one |
| 23:46 | durka42 | one book to rule them all |
| 23:46 | Drakeson | I haven't read that, does he really assume Java knowledge? Is the book usable for newbies? |
| 23:46 | hiredman | many mountains, one volcano |
| 23:47 | hiredman | I haven't read it |