Chapter 3. Lists, Vectors, and Higher-Order Functions
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.
Étude 3-1: Move the Zeros
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”.
Étude 3-2: More List Manipulation
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= ...
Get Etudes for ClojureScript now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.