Hello,

I am just getting started with Clojure and I had a question. I have to 
following code:

(get-rss-entry (get-rss-feeds h-res) url)

The call to get-rss-feeds returns a lazy sequence of URLs of feeds that I 
need to examine. 

The call to get-rss-entry looks for a particular entry (whose :link field 
matches the second argument of get-rss-entry). It examines, one-by-one, the 
lazy sequence returned by get-rss-feeds. Evaluate each item requires an 
http request across the network to fetch a new rss feed. Therefore, to 
minimize the number of http requests it's important to examine the 
sequence one-by-one and stop as soon as there is a match.

Here is the code:
 
(defn get-rss-entry
  [feeds url]
  (first (drop-while empty? (map #(entry-with-url % url) feeds))))

entry-with-url returns a lazy sequence of matches or an empty sequence if 
there is no match.

First, I want to make sure I understood lazy evaluation correctly and that 
I did this right. I tested this and it seems to work correctly. 

Second, not sure if I am solving this problem idiomatically. In Java, for 
example, this would likely be solved with a loop examining some data 
structure. At first I did it with a loop/recur but that didn't seem like 
the right way to do it. Also I saw somewhere that looping in considered low 
level in Clojure or something to that effect. I would appreciate your 
feedback.

Thanks for your help.

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