ru <[email protected]> writes:
> Can anybody point out good (idiomatic) examples of using protocols for
> extending functionality of existing classes?
Here's one that I have in my code:
--8<---------------cut here---------------start------------->8---
(defprotocol VSeq
"Protocol for types supporting vseq."
(vseq-internal [this tm]
"Returns a lazy seq of the graph's vertices restricted by type
matcher `tm', or the vertices following this vertex."))
(extend-protocol VSeq
Graph
(vseq-internal
[g tm]
(lazy-seq
(let [f (first-vertex g tm)]
(and f (cons f (vseq-internal f tm))))))
Vertex
(vseq-internal
[v tm]
(lazy-seq
(let [n (next-vertex v tm)]
(and n (cons n (vseq-internal n tm)))))))
--8<---------------cut here---------------end--------------->8---
Graph and Vertex are existing Java classes.
Bye,
Tassilo
--
(What the world needs (I think) is not
(a Lisp (with fewer parentheses))
but (an English (with more.)))
Brian Hayes, http://tinyurl.com/3y9l2kf
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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