The Motoko language sometimes takes a functional approach, as can be seen when making ’changes’ to immutable arrays
https://sdk.dfinity.org/language-guide/index.html#immutable-arrays
and when appending to lists
https://sdk.dfinity.org/language-guide/index.html#stdlib-list
As a useful guide, Joachim Breitner’s Haskell series may be worth a review to get you thinking about functional programming when approaching your Motoko projects.
Joachim Breitner’s Haskell for Readers, includes a good primer on functional programming:
http://haskell-for-readers.nomeata.de/
And his blog entry on this:
http://www.joachim-breitner.de/blog/750-Teaching_to_read_Haskell
Joachim’s CIS 194 Haskell course at the University of Pennsylvania also contains a good overview of these concepts:
http://cis.upenn.edu/~cis194/fall16/