On May 28, 2009, at 12:35 AM, Mikio Hokari wrote:

>
>>> I wonder if there is a more idiomatic way to compare two lazy
>>> sequences... lazily?
>
> You can just use =.
>
> (= seq1 seq2)
>
> It works lazily.
>
> user> (= (iterate inc 0) (map #(do (println %) %)  [0 1 2 -3 4 5 6]) )
> 0
> 1
> 2
> -3
> false

Seems odd to me that = works with sequences but compare doesn't. Is  
this a Java thing?

In other words, it seems odd that this works:

user> (defn get-comparators [str]
   (cons (nth str 0)
        (lazy-seq (do
                      (println "Looking at second element")
                      (Thread/sleep 1000)
                      (list (nth str 1))))))

user>  (sort-by get-comparators = ["ab" "cd" "ef" "gh"])
("ab" "cd" "ef" "gh")

But this doesn't:

user>  (sort-by get-comparators ["ab" "cd" "ef" "gh"])
java.lang.RuntimeException: java.lang.RuntimeException:  
java.lang.ClassCastException: clojure.lang.Cons (NO_SOURCE_FILE:0)
   [Thrown class clojure.lang.Compiler$CompilerException]

(Of course, if you use = instead of compare, it won't really sort the  
list...)

—
Daniel Lyons
http://www.storytotell.org -- Tell It!


--~--~---------~--~----~------------~-------~--~----~
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 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to