Fibonacci numbers in J
This example uses the recursive definition of Fibonacci numbers.
@.(agenda) is a higher order dyadic function taking an array of functions(a gerund, created by tying together individual functions using the tie conjunction represented by a back-tick character) on the left and a function on the right that computes the index of the function in the function array(gerund) to be applied on the called argument.
The general call to agenda:
The function g is used to calculate an index using the argument x, this index is then used to select the function to be applied from the left argument of agenda, the function array. The function that is selected is then applied to the original argument x.
In the case of the above Fibonacci function, applying the semantics of the agenda function we get a function which checks whether its argument is less than two, if it is then 1 is returned otherwise the formal recursive calculation of the Fibonacci number is called on the argument.
load 'printf' fibr=: 1:`(-&2 +&$: -&1)@.(2&<)"0 fstr=: '...' ,~ ,~^:4 '%d, ' fstr printf fibr >: i.16