The closest to that would require using a
Subroutine block. It allows you to avoid duplicated code and easy definition of recursive functions. Currently, AM doesn't support user-declared functions, there's no "Function Declaration Block" nor function literal syntax, I would love something like that.
On a side note, if you want to select a function at runtime from a container, you can use a container (array or dictionary) literal being accessed/addressed by a subscript in a block, like this:
{"isOdd": x % 2, "isEven": x % 2 = 0, "toBool": x ? 1 : 0, "cbrt": pow(x, 1/3), "lb": log(x) / log(2)}[F]
Where F would be the name of the "function" you want to apply to x and get a return value. This allows you to dynamically select any "function" you define at a particular block. However, this doesn't work if you execute a Dictionary Put or Variable Set without the subscript, to try to access this container from any block, you must copy-paste the container (with subscript included) if you want to call the same "functions" in another block. This happens because a Variable Set performs its operation on the current value that a expression returns at the moment it's evaluated. So you will always get the same values, because the "functions" aren't being evaluated anymore, the container would contain the "freezed" results of each evaluated expression and will return them when you address them with a subscript.
This behavior can be beneficial if you don't want a dictionary of methods or an array of functions, but you want to perform parallel assignment of multiple keys or indices all at once in a single Variable Set. This is something I showed in my "Compact GCD" flow, where I set the value of 2 values simultaneously and without an auxiliary variable for copying a value.