Why in Acumen we choose its basic language to be a functional programming Language?
The most important reason is that we hope to model the system in the most natural way. This includes two sides.
At the syntax level, what we can do is to use the notations of math that is already widely used by engineers for
dynamics and kinematics. One the other hand, which is also more important, is that mathematical model of dynamics
usually involves functional derivatives.
Functional derivatives are derivatives of functionals: i.e. they carry information on how a functional changes, when the function changes by a small amount. The name functional is used as for a specific kind of function that takes functions as its argument; that is, a function whose domain is a set of functions. In functional programming language, we have lambda calculus and higher-order function (that accepts a function and returns some value or function), and thus functions can be manipulated as first order value in program.
To be more specific, let's consider a simple example. To find the curve of shortest length connecting two points. If there are no constraints, the solution is obviously a straight line between the points. However, if the curve is constrained to lie on a surface in space, then the solution is less obvious, and possibly many solutions may exist. Such solutions are known as geodesics. A general solution is to integrate the path and find the minimized length of the path. Here the integral to be minimized should be a functional, applied to an as-yet unknown function satisfying only some boundary conditions, and differentiability conditions.
Especially in Lagrangian mechanics, a lot of all the operations are on functions(see Lagrangian mechanics). Our inspirations in designing Acumen comes from how to represent those equations natually, and inteprete them in the nature mathematical way.