I'm working the exercises in SICP using Clojure and learning Clojure as I
go. I've stumbled across a mystifying NullPointerException. I'm implementing
exercise 2.23, where you're supposed to implement a "for-each" method that
takes a function and a list of items. It applies the function to teach item.
Here's what I tried.

(defn for-each [f items]
  (if (not (empty? items))
      ((f (first items)) (for-each f (rest items)))))   ; line #3

(for-each (fn [x] (println (* x x))) (list 1 2 3 4 5))

Here's the output:

1
4
9
16
25
Exception in thread "main" java.lang.NullPointerException (ex2.23.clj:0)
        at clojure.lang.Compiler.eval(Compiler.java:4620)
        at clojure.lang.Compiler.load(Compiler.java:4934)
        at clojure.lang.Compiler.loadFile(Compiler.java:4901)
        at clojure.main$load_script__7261.invoke(main.clj:210)
        at clojure.main$script_opt__7298.invoke(main.clj:262)
        at clojure.main$main__7322.doInvoke(main.clj:337)
        at clojure.lang.RestFn.invoke(RestFn.java:413)
        at clojure.lang.Var.invoke(Var.java:359)
        at clojure.lang.AFn.applyToHelper(AFn.java:173)
        at clojure.lang.Var.applyTo(Var.java:476)
        at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
        at user$for_each__1.invoke(ex2.23.clj:3)
        at user$for_each__1.invoke(ex2.23.clj:3)
        at user$for_each__1.invoke(ex2.23.clj:3)
        at user$for_each__1.invoke(ex2.23.clj:3)
        at user$for_each__1.invoke(ex2.23.clj:3)
        at user$eval__4.invoke(ex2.23.clj:5)
        at clojure.lang.Compiler.eval(Compiler.java:4604)
        ... 10 more


I tried replacing the list in the last line with a vector. Same result.

Suggestions welcome!
dean


-- 
Dean Wampler
coauthor of "Programming Scala" (O'Reilly)
-  http://programmingscala.com

twitter: @deanwampler, @chicagoscala
Chicago-Area Scala Enthusiasts (CASE):
-  http://groups.google.com/group/chicagoscala
-  http://www.meetup.com/chicagoscala/ (Meetings)
http://www.linkedin.com/in/deanwampler
http://www.polyglotprogramming.com
http://aquarium.rubyforge.org
http://www.contract4j.org

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