On Jan 10, 12:03 pm, Erlis Vidal <[email protected]> wrote:
> Hi,
>
> I'm solving the following exercise and when I'm trying to use the answer:
>
> #(reduce + (for [x coll] 1))
>
> I get the error saying that I was using "count" which I'm not. Someone
> knows why is that? Is this a bug in 4Clojure or something in the language
> that I cannot see?
Like Jack Moffitt suggested, for uses count. A handy tip: you can
check the source of a function or macro in a repl using clojure.repl/
source:
(require 'clojure.repl)
(clojure.repl/source for)
;(defmacro for
; "List comprehension. Takes a vector of one or more
; binding-form/collection-expr pairs, each followed by zero or more
; modifiers, and yields a lazy sequence of evaluations of expr.
; Collections are iterated in a nested fashion, rightmost fastest,
; and nested coll-exprs can refer to bindings created in prior
; binding-forms. Supported modifiers are: :let [binding-form
expr ...],
; :while test, :when test.
;
; (take 100 (for [x (range 100000000) y (range 1000000) :while (< y
x)] [x y]))"
; {:added "1.0"}
; [seq-exprs body-expr]
; (assert-args for
; (vector? seq-exprs) "a vector for its binding"
; (even? (count seq-exprs)) "an even number of forms in binding
vector")
; <rest of code elided>
You can see that the last line above calls count. My guess is that
since for is a macro, it gets expanded and the 4clojure engine sees
the count function and trips the alarm.
--
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