For instance, we can implement an equivalent of the standard library's
foreach function by taking a function
f as the first parameter.
function myforeach(f, xs) for x in xs f(x) end end
We can test that this function indeed works as we expect:
julia> myforeach(println, ["a", "b", "c"]) a b c
By taking a function as the first parameter, instead of a later parameter, we can use Julia's do block syntax. The do block syntax is just a convenient way to pass an anonymous function as the first argument to a function.
julia> myforeach([1, 2, 3]) do x println(x^x) end 1 4 27
Our implementation of
myforeach above is roughly equivalent to the built-in
foreach function. Many other built-in higher order functions also exist.
Higher-order functions are quite powerful. Sometimes, when working with higher-order functions, the exact operations being performed become unimportant and programs can become quite abstract. Combinators are examples of systems of highly abstract higher-order functions.