by [Theo Verelst] A function mostly is taken to be a mathematical procedure or formula with zero or more arguments, which after substitution/evaluation gives an outcome. In computer language, mostly it is seen such that a procedure has a number of usually pass by value arguments which returns a single value. The relevance probably lies in the overseeableness and mathematical applicability and the abstraction possibility: one makes a function for a certain task, and calls it in the scope of a bigger one as a block with a number of inputs and one output, and composes functions by letting the output of the one act as input of another. In principle, this can lead to tree structures where the last block or root of the tree gives the answer to a computation which can be arbitrarily branched out in into subtasks, which can also be trees. In a programming language like tcl, it is perfectly possible to compute a result based on nested function or procedure calls in the normal sense of most modern languages. Intermediate results are silently stored on stack, while the syntax/grammer in the parser of the language will start evaluating/executing the innermost called functions/code, which can be visualized at the leafs of the function calling tree, for instance for this formula in expr: expr (exp(1/(x^2))/(x^2)