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.

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.

--
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

Reply via email to