Re: clojure 1.2 seq fn enhancement FAQ

2010-04-30 Thread Sophie
On Apr 29, 3:21 am, ataggart alex.tagg...@gmail.com wrote:

 Functions named contains-key? and contains-val? would make a lot more
 sense to me than the current contains? and new seq-contains?.

Amen.  Even independent of any performance expectations.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: problem installing clojure/Enclojure with Netbeans

2010-04-23 Thread Sophie
I had trouble with Enclojure 1.1.1

What worked for me: uninstall it and follow the Netbeans section at
http://github.com/relevance/labrepl

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Which version of Netbeans to use Compojure on OSX?

2010-04-21 Thread Sophie
I see downloads named
  - Java SE (45MB)
  - Java FX (76MB)
  - Java (146MB) - apparently includes Sun Glassfish Server  what-not

I'm using OSX 10.5.8, and just want to install the easiest Netbeans
(with Enclojure) to for development with Compojure.

Would I use Compojure with Jetty? Apache (built into OSX)?

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


How to hide data representation with keywords for deftype accessor?

2010-04-10 Thread Sophie
(deftype A [x]) gives me an accessor (:x anA)

Then I decide to change data representation of A without impacting
client code, but I don't seem able to define a function
(defn :x [anA] ...)

Should I be doing something different?

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: A syntax question: positional keyword

2010-04-08 Thread Sophie
On Apr 7, 7:56 am, David Nolen dnolen.li...@gmail.com wrote:
 The runtime cost of destructuring is not worth getting worked up
 about. It's easy to check this yourself with (time ...)

Results below:

user= (defn fk [ {:keys [a b c]}] (+ a b c))

user= (defn fp [a b c] (+ a b c))

user= (time (dotimes [_ 100] (fk :a 2 :b 2 :c 2)))
Elapsed time: 1582.178 msecs

user= (time (dotimes [_ 100] (fp 2 2 2)))
Elapsed time: 319.243 msecs

Not sure how significant that would be in user code, but I'd rather
not have to choose less a less readable version because of the hit.
Positional keywords would give the readable function calls without the
run-time hit (and we could still use optional keys if they were
somehow distinguished in the function calls).

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: A syntax question: positional keyword

2010-04-08 Thread Sophie
On Apr 7, 12:37 pm, Armando Blancas armando_blan...@yahoo.com wrote:
 in other languages they'd be annotations and maybe perceived
 as redundant, e.g. a call like: (circle x y radius) is readable

Ah, but what about:
(circle year population income)
vs.
(circle :x year :y population :r income)

 In Smtalltalk a single-arg keyword message is readable because the
 syntax gets the received out of the way to the left: 5.0 raisedTo: 3
 where #raisedTo: is both the selector and keyword.

(raise base: 5 to: 3)  ;; all keyword
(raise 5 to: 3)  ;; 1st positional + 2nd keyword

Smalltalk may actually be the asymmetrical one here:
   truck moveX: 5 y: 6
vs.
   truck move x: 5 y: 6 ;; my prefixed version
Smalltalk munges the root command name (move) with the keyword for the
first argument (X), which is why I showed a prefixed version instead.
In Clojure this might be:
   (move :obj truck :x 5 :y 6) ;; all keyword
   (move truck :x 5 :y 6) ;; combine position + keyword

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: A syntax question: positional keyword

2010-04-08 Thread Sophie
On Apr 8, 11:08 am, David Nolen dnolen.li...@gmail.com wrote:
 In my own code I only avoid the convenience of destructuring in the
 rare tight loops such as calculations intended to drive animations.

But when you write a function you would have to decide positional vs.
keyword. Would you then take a guess about usage in tight loops vs.
not?

 I've found it to have little effect elsewhere on program performance.

I suspect you are right.

Anyway, I'm very glad to see the style supported, and hope the cleaner
defnk version wins, with some ability to further destructure the
keyworded arguments.

(defnk f [a b :c 1 :d 2] [a b c d])

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Mutually-referencing structures

2010-04-06 Thread Sophie
On Apr 6, 8:09 am, Christophe Grand christo...@cgrand.net wrote:

 Let say one can write:
 (def john-doe {:name John Doe :email j...@doe.com :account {:owner
 #cyclic reference to the root map :balance 1000}})

At this point the cyclic structure is a consistent value. As long as
updates create new values that match the domain invariants, why should
any subsequent value cause a  problem?

 Then you want to add 10$ to John's account:
 (update-in john-doe [:account :balance] + 10)

If that is what you update, then of course you will get ...

 The resulting data structure is:
 {:name John Doe :email j...@doe.com :account {:owner #cyclic reference
 to the OLD root map :balance 1010}}

But how is this unique to cyclic structures? I can always mistakenly
create values and update them to end up with a structure that
incorrectly combines old and new values.

(def john-doe {zip-code: 12345 state: {name: CA}})

(update-in john-doe [:zip-code] + 5000)
;; new zip code, invalid old state

Maintaining domain invariants is the programmers responsibility,
whether or not there are cyclic references. Why wouldn't the same
facility that lets you create consistent mutual references in the
original John Doe value, also allow you to create consistent mutual
references in a consistent new (updated) John Doe value?

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


A syntax question: positional keyword

2010-04-06 Thread Sophie
Please don't misunderstand this post - it is not asking for a change
of syntax, just trying to understand something.

Clojure has chosen positional parameters (just like for Lisp, C, C++,
Java, Ruby, Python, Prolog, ...)

Smalltalk composes a full method name from a prefix-name + named
parameters.
   [obj]  prefix key1: x key2: y key3: z

The [obj] part above is an artifact of the single-dispatch model, and
is irrelevant to this discussion, so I'll leave it out from here on.
Importantly, the method name here is a composite:
   #prefix:key1:key2:key3

This leads to remarkably readable function calls:
1.   (schedule project: p1 after: p2 before: p3 priority: 7)
  ;; calls schedule:project:after:before:priority
vs.
2.   (schedule p1 p2 p3 7)

Note that 1. in no way requires arbitrary ordering of keywords, maps,
de-structuring, etc. The positions are still fixed, just keyword-
prefixed. It's like taking the Clojure parameter list
(defn schedule
  [project before after priority] )
and requiring those parameter names (or a formal version thereof which
is meant to be part of the interface) at the calling sites.

An only-slightly-strained analogy would be only allowing %1 %2 for
formal parameters in all function bodies
(defn schedule [%1 %2 %3]
  ( stuff with %1 %2 ...))
or
   (deftype Person [name age])
and then requiring
   (1 joe)   instead of   (:name joe)

Just curious
  - what folks think of fixed-positional-keyword params
  - whether it was considered for Clojure

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: Set as function

2010-04-06 Thread Sophie


On Apr 6, 12:16 am, Alex Osborne a...@meshy.org wrote:
 Calling the set as if it is a fn is a short-hand for get, that is
 retrieving an element from the set. Why would you want to do this, when
 to look it up you need to know what element is?  Sets are based on
 value-equality not reference-equality.  Thus you can have an object in
 the set that is equal to your lookup key but not identical.  

Got it, thanks.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: A syntax question: positional keyword

2010-04-06 Thread Sophie
On Apr 6, 4:46 pm, Jarkko Oranen chous...@gmail.com wrote:
 problem is that they also make some very common functional patterns
 cumbersome: most notably function application (ie. apply),
 composition, and higher-order functions.

I don't think it should be either-or (and positional would be needed
anyway to call out to Java  friends). So your functional patterns
could still be done positionally, since the first-class function
arguments f  g are not named anyway:
(let [f ...,  g ..., x ...]
  (apply f g x)
  (comp f g))

The arg-lists in the defn would distinguish
   ;; positional-keyword calls needed
   ;; function name is a composite
   ;; one defn could create more than one function name
   (defn schedule [project: p before: b after: a priority: i] ...)
from
   ;; existing defn  calling code could even be unchanged
   ;; no keywords
   (defn apply (f args* argseq) ...)

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: A syntax question: positional keyword

2010-04-06 Thread Sophie
On Apr 6, 5:23 pm, Stuart Halloway stuart.hallo...@gmail.com wrote:
 Have you seen destructuring of rest args in the current master branch?

 (defn foo [ {:keys [a b c]}] [a b c])

 (foo :a 1 :c 3)
 = [1 nil 3]

 With this last bit of sugar in place I am extremely happy with  
 Clojure's arg handling.

Hmmm. Looks nice, but if these are optional, any-order keys
  - is there a run-time cost to construct / deconstruct / lookup?
  - how do I use foo in apply, comp, and friends?

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: A syntax question: positional keyword

2010-04-06 Thread Sophie
Don't you think
  - fixed-order named parameters
could (should?) be a separate issue from
  - optional, any-order, named parameters
?

;; :x :y are fixed order, named, while :a :b are optional, named
(defn foo [:x :y  {:keys [a b]] [x, y, a, b])

(foo :x 1 :y 2)
= [1 2 nil nil]

(foo :x 1 :a 2)
= error

(foo :x 1 :a 3 :y 2)
= error

(foo :x 1 :y 2 :b 3)
= [1 2 nil 3]

Note that
(defn foo
   ([:x  {:keys [y]]   [x nil])
   ([:x :y][x y]))
would create 2 function symbols e.g. foo:x and foo:x:y

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: Mutually-referencing structures

2010-04-06 Thread Sophie
I would really love to see (clearly by someone much smarter than I :)
an insightful summary of these kinds of concept-heavy discussions,
stickied or FAQd or even book'd somewhere.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: A syntax question: positional keyword

2010-04-06 Thread Sophie
On Apr 6, 7:03 pm, ataggart alex.tagg...@gmail.com wrote:
 See:

 http://richhickey.github.com/clojure-contrib/def-api.html#clojure.con...

Ah, thank you (all).

Will this be in 1.2? Is run-time cost expected to be minor, and will
passing unrecognized keys be an error?

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Mutually-referencing structures

2010-04-05 Thread Sophie
(deftype Account [owner balance])
(deftype Person [accounts])

joe has 1 account.

How to I create / initialize joe  the account with mutual references?
I'd rather not use refs.

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: Mutually-referencing structures

2010-04-05 Thread Sophie
Is this a Clojure restriction, or is it intrinsic to functional
programming?

If my app is essentially about a user creating and editing a graph
structure (sometimes via crud-level interactions, other times by
somewhat larger refactorings), is either Clojure or functional not a
good match?

Thanks for any advice!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: Mutually-referencing structures

2010-04-05 Thread Sophie
 It's a consequence of immutable data structures, which are an aspect of 
 functional programming. An immutable object can never be changed

But single-assignment is a quite valid (and more flexible?)  form of
immutability. I'm not convinced cycles are intrinsically tied to it in
any way.

(In fact, I initially thought Clojure had an unambiguous sentinel
value for not initialized)

I was hoping to develop (or find :) macros to automate the code for
maintaining various kinds of 2-way pointers, rather than use separate
ID fields or (essentially global) collections of pairs for relations.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Set as function

2010-04-05 Thread Sophie
Why this behavior?

user= (#{5 nil} 5)
5
user= (#{5 nil} 4)
nil
user= (#{5 nil} nil)
nil

rather than the seemingly more informative:
user= (#{5 nil} 5)
true
user= (#{5 nil} 4)
false
user= (#{5 nil} nil)
true
user= (#{5 false} true)
false
user= (#{5 false} false)
true

i.e. set as characteristic function:
   element - bool

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using remove me as the subject.


Re: labrepl, making Clojure more accessible

2010-03-26 Thread Sophie
Just tried this with NetBeans 6.7.1 on OSX 10.5.8. Got through all
setup steps with no problem. When I try to start the project REPL, I
get:

There did not appear to be both valid clojure and clojure-contrib
jars present in the classpath... (some paths to ...1.2.0-master-
SNAPSHOT.jar)

If I elect Use the default platform Clojure-1.0.0, a REPL starts,
then (require 'labrepl) gives FileNotFoundException for clojure/
contrib/logging__init.class  logging.clj

HTH.


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe from this group, send email to 
clojure+unsubscribegooglegroups.com or reply to this email with the words 
REMOVE ME as the subject.


Re: Logic programming in Clojure

2010-03-26 Thread Sophie
Really nice!

Is it aware of all Clojure structures, including maps etc?

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe from this group, send email to 
clojure+unsubscribegooglegroups.com or reply to this email with the words 
REMOVE ME as the subject.


Benefit of declarative functional UI in Clojure?

2010-03-25 Thread Sophie
Would a Clojure app benefit sigificantly from a declarative functional
UI along the lines of
Lunascript http://www.asana.com/luna or FlapJax http://www.flapjax-lang.org/
?

The results look quite impressive ... but I don't have much to compare
to in Clojure. I am relatively new to both Clojure and the functional-
reactive programming approach, so looking for some hints on whether it
is worth exploring deeply.

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe from this group, send email to 
clojure+unsubscribegooglegroups.com or reply to this email with the words 
REMOVE ME as the subject.


Re: clojure slides

2010-03-07 Thread Sophie
Re: Emacs + Slime + paredit. I did not see Clojure listed as supported
for Slime and paredit. Do you know if:

- AquaEmacs (mac) is a shoe-in?
- Can you do all Slime stuff in Clojure? evaluate, macro-expand, docs,
etc?
- Same for par-edit

Thanks!

On Mar 4, 1:56 pm, Baishampayan Ghose b.gh...@ocricket.com wrote:
 Wilson MacGyver wrote:
  Looks like I'll be doing a talk on clojure next week at the local java
  user group.

  Any recommendations on slides I can steal? :)

 Feel free to use mine 
 -http://www.slideshare.net/zaph0d/introduction-to-clojure

 Regards,
 BG

 --
 Baishampayan Ghose b.gh...@ocricket.com
 oCricket.com

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Some basic guidance to designing functional vs. state parts of app

2010-03-04 Thread Sophie
Thank you all, the replies so far and the questions have already
deepened my understanding considerably!

Looking forward to more. I think a bit more discussion like this (not
necessarily my quite skimpy example) would be quite valuable to many
like me.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Some basic guidance to designing functional vs. state parts of app

2010-03-03 Thread Sophie
As a bit of a newbie to the functional + identity/state design space,
I'm struggling a bit with where to use identity constructs (refs) and
where to stay with pure functions, and could use some guidance. Pardon
me if some of my terms are a bit off. Here is a simple hypothetical
app for matching Applicants to Jobs.

I have several Applicants, each with some set of Skills. There are
several Jobs, each with some Requirements. There is some Match
relation between Skills and the Jobs they can match. The set of
Applicants, each of their skills, and the set of Jobs can change with
time. There is a set of Jobs that each Applicant can fill,
functionally computed from applicant skills  job requirements 
Match.

Ok, so jobs_that_an_applicant_can_fill is a pure function, I get
that.

Do I design a single World ref whose state changes with time to
different worlds, so adding a new Applicant or even adding a new Skill
to an existing Applicant results in a new World value? Or is it better
to have an Applicants ref and a Jobs ref that refer to different
sets of those er.. things?

Can each Applicant have a skills ref, whose state changes to
different sets of Skills? Should I design it this way?

How do I choose? What are the trade-offs?

Any and all guidance, insights, advice etc. welcome!

Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en