In this chapter, you will work with lists and vectors, along with the `map`

, `filter`

, and `reduce`

functions. All of these take functions as one of their arguments, and are thus higher-order functions.

This is a quick warm-up étude. Given a list of integers that have zeros interspersed throughout, move all the zeros to the end. Name the function `move-zeros`

; it accepts a list as an argument and returns a new list with the zeros at the end. I saw the problem at this page, solved in Java, and wondered if I could do it in ClojureScript. Answer: yes, I could. And so can you. Hint: `filter`

is useful. After I solved it, I realized just how much my thinking about functional programming had changed the way I look at imperative code. You may have the same experience:

move-zeros.core=> (move-zeros [1 0 0 2 0 3 0 4 5 0 6]) (1 2 3 4 5 6 0 0 0 0 0)

See a suggested solution: “Solution 3-1”.

Write a function named `ordinal-day`

that takes a day, month, and year as its three arguments and returns the ordinal (Julian) day of the year. Bonus points if you return zero for invalid dates such as 29-02-2015 or 40-40-2015. Don’t worry about handling dates before the year 1584 correctly.

You will need to know if a year is a leap year or not. I’ll give you that one for free:

(defn leap-year? "Return true if given year is a leap year; false otherwise" [year] (or (and (= 0 (rem year 4)) (not= ...

Start Free Trial

No credit card required