Hans L on Sun, 08 Mar 2020 19:24:04 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Not a function in function call


Thanks for the reply and explanation,

I will use the form:  call("Str",[[1,2,3,4]])  now, as you recommended.
This works great for my purpose.

Hans


On Wed, Mar 4, 2020 at 4:47 PM Bill Allombert
<Bill.Allombert@math.u-bordeaux.fr> wrote:
>
> On Wed, Mar 04, 2020 at 02:29:31PM -0600, Hans L wrote:
> > Not sure if this is any relation, but I'm seeing the same error on a
> > much simpler test case:
> >
> > ? ?Str
> > Str({x}*): concatenates its (string) argument into a single string.
> >
> > ? Str(1,2,3,4)
> > %1 = "1234"
> >
> > ? ?call
> > call(f, A): A being a vector, evaluates f(A[1],...,A[#A]).
> >
> > ? call(Str, [1,2,3,4])
> >   ***   at top-level: call(Str,[1,2,3,4])
> >   ***                 ^-------------------
> >   *** call: not a function in function call
> >   ***   Break loop: type 'break' to go back to GP prompt
> >
> > I would expect this to return the same as Str(1,2,3,4)
> > Is this a bug or is there some nuance to using "call" that I'm not
> > understanding?
>
> The problem is that for historical reasons, functions without mandatory
> arguments can be called without trailing ().
> This is needed for I and Pi to work as expected.
> Unfortunately, this also works with Str.
>
> Secondly, Str is a variadic function, so you need to pass all parameters
> as one. You can do
> ? call("Str",[[1,2,3,4]])
> %59 = "1234"
>
> Cheers,
> Bill.
>