.? kinda almost works. It's not exactly a predicate, but it means "access this member if not null".
Or perhaps .* which would mean "access as many members as possible in the following list". Paul On Mon, Oct 6, 2008 at 10:00 AM, Rich Hickey <[EMAIL PROTECTED]> wrote: > > > > On Oct 6, 9:36 am, Stuart Halloway <[EMAIL PROTECTED]> wrote: > > Yes, that's better. Glad you like the idea. > > > > Does anybody not named Stuart also want to see this added to > > Clojure? ;-) > > > > Stuart > > > > > On Oct 3, 3:13 pm, Stuart Halloway <[EMAIL PROTECTED]> wrote: > > >> (defmacro ?. > > >> "like .. but drops out on null object" > > >> ([x form] > > >> `(. ~x ~form)) > > >> ([x form & more] > > >> `(if-let x# (. ~x ~form) (.? x# [EMAIL PROTECTED])))) > > > > > Interesting -- I like it. It doesn't seem to be totally compatible > > > with "..", though: > > > > > user=> (?. System (getenv "SHELL") (startsWith "/bin") getClass > > > getName) > > > java.lang.Exception: Unable to resolve symbol: startsWith in this > > > context (NO_SOURCE_FILE:62) > > > > > Also, if-let could give the wrong result in the (admittedly unlikely) > > > situation that one of the methods returns Boolean.FALSE. > > > Here's another take: > > > > > (defmacro ?.. > > > "like .. but stops and returns nil if any method returns nil" > > > ([x form] > > > `(.. ~x ~form)) > > > ([x form & more] > > > `(let [x# (?. ~x ~form)] > > > (if (nil? x#) nil > > > (?. x# [EMAIL PROTECTED]))))) > > > > > user=> (?.. System (getenv "SHELL") (startsWith "/bin") getClass > > > getName) > > > "java.lang.Boolean" > > > user=> (?.. System (getenv "FOO") (startsWith "/bin") getClass > > > getName) > > > nil > > > > I'm not opposed, but we'll need to find another name. Leading ? is a > likely candidate for rule syntax, and trailing means predicate. > > .?. > > ? > > Rich > > > > --~--~---------~--~----~------------~-------~--~----~ 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 To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---