Clojure Goodness: Combine First And Next Functions Multiple Times
The first
function in Clojure returns the first item of a collection. The next
function returns a new sequence with all elements after the first element from a collection. Clojure adds some utility methods to combine first
and next
with different combinations. We can use the function ffirst
which is will return the first element of the first element of a collection and the nfirst
function to get the next elements from the first element of a collection. We can use the function fnext
to get the first element of the next elements of a collection and the function nnext
to get the next elements of the next elements of a collection.
In the following example we use the ffirst
, nfirst
, fnext
and nnext
:
(ns mrhaki.seq
(:require [clojure.test :refer [is]]))
(def langs [{:language "Clojure" :site "https://clojure.org" :dynamic true}
{:language "Groovy" :site "https://www.groovy-lang.org" :dynamic true}
{:language "Java" :site "https://www.java.com" :dynamic false}
{:language "Kotlin" :site "https://kotlinlang.org" :dynamic false}])
;; Find first map entry of first map in languages.
(is (= [:language "Clojure"]
(ffirst langs)
(first (first langs))))
;; Find next map entries for first map in languages.
(is (= (list [:site "https://clojure.org"] [:dynamic true])
(nfirst langs)
(next (first langs))))
;; Find first map of next maps in languages.
(is (= {:language "Groovy" :site "https://www.groovy-lang.org" :dynamic true}
(fnext langs)
(first (next langs))))
;; Find next maps of next maps in languages.
(is (= (list {:language "Java" :site "https://www.java.com" :dynamic false}
{:language "Kotlin" :site "https://kotlinlang.org" :dynamic false})
(nnext langs)
(next (next langs))))
Written with Clojure 1.10.1.