I'd like to collect various functions in a sequence and activate them by the sequence index, like in this simple example:
mul2: func [n] [2 * n]
mul3: func [n] [2 * n]
...
(pick [mul2 mul3] 1) 2 ; yields 2
It seems that mul2
is not treated like a function when it's referred to as a sequence item:
type? (pick [mul2] 1) == word!
Is it possible to arrange functions into sequences?
While experiencing with this example, I noticed that
function? mul2
complains that the argument of mul2
is missing, instead of returning true
. Where am I wrong?
mul2
and mul3
are just words
mul2: func [n] [2 * n]
mul3: func [n] [3 * n]
w: pick [mul2 mul3] 1
type? w
; == word!
When you get
it's value, then you'll have the function:
f: get pick [mul2 mul3] 1
; == func [n][2 * n]
type? :f
; == function!
function? :f
; == true
Notice that I used :f
(get-word) to get the unevaluated value (the function itself) instead of f
, because f
will be evaluated and will require its parameters.
And then you can use f
:
f 6
; == 12