i'm working through SICP - one exercise is to implement foreach (doseq). **This is an academic exercise**. In clojure, this is what I came up with:

```
(defn for-each [proc, items]
  (if (empty? items) nil
      (do
        (proc (first items))
        (recur proc (rest items)))))

```

but, i'm a little murky about if `do` is cheating, because `do` is a special form in clojure and i don't think anything like that has been introduced yet in SICP. **is there a more minimalist answer?** 

Here's another attempt which only executes proc on the last element:

```
(defn for-each-2 [proc, items]
  (let [f (first items)
        r (rest items)]
    (if (empty? r)
      (proc f)
      (recur proc r))))

```