When we use a function as argument for the map
function that returns a collection we would get nested collections. If we want to turn the result into a single collection we can concatenate the elements from the collections by applying the concat
function, but we can do this directly with the function mapcat
. The function mapcat
takes as first argument a function (that returns a collection) and one or more collections as next arguments.
In the following examples we see several uses of mapcat
:
Continue reading →
When we are working with sets in Clojure we can use some useful functions from the clojure.set
namespace. In a previous post we learned how we can get the difference of several sets. To get the union of several input sets we use the union
function of the clojure.set
namespace. The function returns a new set that is the union of unique elements from the input sets. A nil
value is ignored by the union
function.
In the following example code we use union
:
Continue reading →
If we want to get the values from a set that are not part of one or more other sets we must use the difference
function in the clojure.set
namespace. The function returns a set with all values from the first set that are different from values in other sets.
In the following example we use the difference
with several sets:
Continue reading →
In Clojure functions are everywhere. In a previous post we learned that sets can be functions, but Clojure also makes keywords functions. A keyword is a symbol starting with a colon (:
) and is mostly used in map entries as key symbol. The keyword as function accepts a map as single argument and returns the value for the key that equals the keyword in the map or nil
if the keyword cannot be found.
In the following code we use keywords as function in several examples:
Continue reading →
One of the nice things in Clojure is that some data structures are also functions. For me this felt rather strange when learning Clojure (coming from Java), but it can be very powerful. A set in Clojure is also a function. The set as function accept a single argument and it return nil
when the argument is not part of the set, otherwise the argument value is returned. This behaviour also makes a set as function a nice predicate to be used for example in collection functions.
In the following example code we use different sets as function:
Continue reading →
The Clojure function complement
can be used to created a new function that returns the opposite truth value of the old function. The new function accepts the same number of arguments as the old function. Also when we invoke the new function created by the complement
the old function is actually invoked and the result is used as argument for the not
function to return the opposite truth value. So if the original function returns false
or nil
the result for the new function is true
.
In the following example code we create a new function bad-weather
that is the complement of good-weather
:
Continue reading →
If we want to transform items in a collection we can use the map
function. If we also want to use the index of the element in the collection in the transformation we must use the map-indexed
function. We must provide a function with 2 arguments, where the first argument is the index of the element in the collection and the second argument is the element in the collection.
In the following examples we use the map-indexed
function:
Continue reading →
In Clojure we can use the repeat
function to get an infinite sequence of a given value. We can pass a length argument to get a fixed size sequence of the value. Clojure also provides the repeatedly
function that takes as argument a function without arguments. A infinite sequence of invocations of the function is returned. Just like with the repeat
function we can pass a length argument so the returned sequence has a fixed size.
We use the repeat
and repeatedly
function in the following example:
Continue reading →
The Clojure function cycle
take a collections as argument and creates a lazy sequence by repeating the items in the collection. So if we pass a collection with the characters \a
, \b
and \c
we get a lazy sequence of (\a \b \c \a \b \c …)
.
Written with Clojure 1.10.1.
Continue reading →
The Clojure function zipmap
create a map by interleaving a collection of keys with a collection of values. The first element of the keys collection is the map entry keyword and the first element of the values collection is than the map entry value, and so on for the other elements in the keys and values collections.
In the following example code we use zipmap
using different examples of keys and values collections:
Continue reading →
In Clojure we can use the comp
function to create a new function based on multiple other functions. We create a new function by composing other functions. We can invoke the function that is returned from the comp
function with input arguments. These arguments are applied to the right most function that was used with comp
. Then the output of that function is the input for the next function.
In the following example code we see several usages of the comp
function. Also we see how the ordening of the functions can change the output:
Continue reading →
In Clojure we can use the range
function to create a lazy sequence of numbers. We can optionally specify a start value, end value and define the steps between the numbers. If we use the end value argument that value is exclusive for the returned values in the lazy sequence.
In the following example we invoke the range
function with different arguments:
Continue reading →