Nice try, but it is only a more complicated version of:

bop: func [
    {returns the results of operating on elements of b with those
of bb -
        last element of bb will be reused if necessary}
    'op [word!] "name of function to use"
    b [block!]
    bb
    /local r
][
    op: get in system/words op
    r: copy []
    if not block? bb [bb: reduce [bb]]
    while [not tail? b] [
        append r op first b first bb
        b: next b
        if 1 < length? bb [bb: next bb]
    ]
    r
]

>> bop / [4 2] 2
== [2 1]

, which is a pure prefix matter ;-)

>
> Hi Ladislav,
>
> What do you think of this? It's sort of polymorphic, but it's
not the
> right approach to handle complex numbers.
>
> bop: func [
>     {returns the results of operating on elements of b with
those of bb -
>     last element of bb will be reused if necessary}
>     'op [word!]       "name of function to use"
>     b   [block!]
>     bb
>     /local r -
> ][
>     op: get in system/words op
> if op? :op [set '- :op]
>     r: copy []
>     if not block? bb [bb: reduce [bb]]
>     while [not tail? b] [
>         append r either :- [(first b) - (first bb)][op first b
first bb]
>         b: next b
>         if 1 < length? bb [bb: next bb]
>     ]
>     r
> ]
>
> >> bop * [$2.00 $1.53] 2
> == [$4.00 $3.06]
> >> bop ** [2 3 4] [4 3 2]
> == [16 27 16]
> >> bop and [1 2 3 4 5 6 7 8] 5
> == [1 0 1 4 5 4 5 0]
>
> See you,
> Eric
>
>
>

Reply via email to