query function for number of arguments



On Friday 30 April 2010 03:29:26 Raymond Toy wrote:
> There's function-lambda-expression, but it could return NIL.
 That looks like the best I can do.

> This seems like a strange question.  You want to call some Lisp
> function, but you don't know how many arguments it has?  Then why are
> you calling that function to begin with?
 
 It comes up in the Mathematica to Macsyma translator. For instance, in Mma
  
  Mod[10,6]
  4

  Mod[10,6,1] --> error, too many arguments

  Apply[Mod[#1,#2]&, {10,6,1}]
  4

  But the Macsyma translation fails when called:
  Apply(lambda( [arg1,arg2], Mod(arg1,arg2) ),[10,6,1]);

  This is not documented AFAIK but its what happens. I am testing user code that
  contains the following in the body of a function definition, which asks for
  an array of zeroes:
  
  Array[0*#&,lsf], where lsf is a list of positive integers giving the dimensions of
  the array.

  The translator gives this:

  Array(lambda( [arg1], (0*arg1) ),lsf))

  The anonymous functions want one argument, but lsf could be [2,3] for instance.
  The Mma function silently throws away the superfluous arguments. But Macsyma
  fails with an error. (The user could have even used Array[0&,ls] )

  If this behavior only happens with anonymous functions (I
  don't know), I could translate them as
 
  Array(lambda([[args]], f(args[1],...,args[n]), lst));

  instead of
  
  Array(lambda([arg1,...,argn], f(arg1,...,argn), lst));

  Since I wrote my post I am beginning to suspect it only applies to
  lambda functions, which means I don't need anything like  function-lambda-expression.

  Thanks,
  John